对某cpp排序题的思考过程记录
昨天十点有人在群中求助:如何用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;
for(i = 1; i < 6; i++)
{
for(j = 1; j <=i; j++)
{
printf("%d",j);
}
printf("\n");
}
return 0;
}
乍一看很好。调试后出现运行错误。变成了
1
12
123
显然,这里只有换行了。而每次换行后开头都是1。那就说明,第二个循环的初始值有问题。
我发现了第二个循环的j总是为一。故把第二个循环第一个参数删去,在程序一开始就定义j为1。
于是出现下列代码。
#include <stdio.h>
int main()
{
int i, j=0;
for(i = 1; i < 6; i++)
{
for(; j <=i; j++)
{
printf("%d",j);
}
printf("\n");
}
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 ");
}
system("pause");
return 0;
不知怎的,让我霎时间很感动。
通过这次思考 大家也可以明白编程的逻辑性与思路多样性 祝大家编程快乐 本帖最后由 cqr2287 于 2017-2-9 08:46 编辑
@枫叶飘零 谢谢支持 #include <stdio.h>
int main()
{
char* data="abcdefghij";
int i=0,j=0;
int n=0;
for(int i=0;i<4;i++){
for(int j=0;j<i+1;j++){
printf("%c",data);
}
printf("\n");
}
return 0;
} #include<stdio.h>
int main()
{
char test = 'a';//字母起始
int row = 4;//定义长度
for(int i=1;i<=row;i++)
{
for(int j=1;j<=i;j++)
{
printf("%c",test);
test++;
}
if(i<row)
{
printf("\n");
}
}
return 0;
}
来自神奇的人鱼
页:
[1]