昨天十点有人在群中求助:如何用cpp实现下列效果呢
a
bc
def
ghij
很简单的冒出了一个思路:通过字符的ascii码做循环。为了防止逻辑混乱,我决定先实行这个效果。
1
23
456
7890
从1到9很简单,就是每次加上1。那么换行是个问题。如何考虑换行呢?
第一个思路就是把换行定义为变量i i每次加上一,也就是说每次循环的次数就是i的数值。
于是写出代码:
#include <stdio.h>
int main()
{
int i, j=0;
return 0;
}
这样也不对。因为j值关系循环,而他又不能参与循环。每次循环他的值都被清零,不能保存。于是异想天开,用一个ret来保持j值。
#include <stdio.h>
int main()
{
int i;
int j;
int ret = 1;
for(i = 1; i < 6; i++)
{
for(j=ret; j<=i; j++)
{
printf("%d",j);
ret = j;
}
printf("\n");
}
return 0;
}
就是说,先把ret赋值为1,在循环一开始 ,赋值给j。j在参与完运算之后,再把值给ret。这样ret就能储存了。
结果出现这种效果
12
23
34
也就是说j值总是与上次相同。
(凌晨11点,大脑进入困倦状态)
手机的c4droid没有单步调试。我想看看哪地方出了问题。于是找到了天天能开电脑家长不管的枫叶飘零,求救,能否单步调试找到问题。
在他单步后,也发现了j值没有增加的问题。但是他也没有想出好的办法。
于是我想:既然通过i个数来判断逻辑麻烦,那我们是否可以通过数字的位数判断呢?就是%10。比如12就是两位数 234就是三位数,数字继续按照123456789排列,通过位数判断换行
正在我跟他聊天时,我睡着了。。。
早晨起来,按照思路,写了代码
#include <stdio.h>
int main()
{
int i;
int j = 1;
int sum=1;
int n;
for(;j<=4;j++)
{
for(i= 1;i<=j;i++)
{
sum=sum +1;
n=sum%10;
printf("%d",sum);
}
printf("\n");
}
return 0;
}
实验了一下,可以。
于是又回想到字母。a的ascii是41,十进制是65。z的ascii是5a,十进制是90。所以初始值为65,结束为90。
上了QQ,看见枫叶给我的留言:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i, count = 1, number = 1;
for (; count <= 4; count++) {
for (i = 1; i <= count; i++)
printf("%d",(number++) % 10);
printf("\n ");
}