主题:帮忙解释下这个有趣的C程序
376923432
[专家分:150] 发布于 2009-12-01 18:20:00
#include<stdio.h>
int main(void)
{
int i,j,n;
while(scanf("%d",&n)+1)
for(i=j=n;j--||(putchar(10),j=n-1,--i);
printf("%-7d",((n-1)*3/2+i-j)%n*n+((5*n-1)/2+i+j-n-n)%n+1));
return 0;
}
回复列表 (共7个回复)
沙发
liyu355 [专家分:980] 发布于 2009-12-01 21:04:00
#include<stdio.h>
int main(void)
{
int i,j,n;
while(scanf("%d",&n)+1) //循环scanf函数返回值是int,不管你输入的数字是什么,至少返回0,也就是0项被匹配。而0+1肯定 > 0,所以while循环成立,从而进入循环进行操作
for(i=j=n;j--||(putchar(10),j=n-1,--i);//这里其实就是j-- > 0 || --i > 0而已,其他的不过是进行的一些逻辑操作,如果需要查看内部的具体实现则可以看看。
printf("%-7d",((n-1)*3/2+i-j)%n*n+((5*n-1)/2+i+j-n-n)%n+1)); //总的来说这个for循环就是控制打印的一些数据而已。没什么特别的,只是将所有的逻辑操作都放到里面了。不过具体打印什么东西,我就没有具体看了。
return 0;
}
板凳
tanchuhan [专家分:15140] 发布于 2009-12-03 14:16:00
这样更加有趣,为什么不这样写呢?
[code=c]
#include<stdio.h>
int main(){int i,j,n;while(scanf("\045\144",&n)+1)for(i=j=n;j--||(putchar(012),j=n-1,--i);printf("\045\055\067\144",((n-1)*3/2+i-j)%n*n+((5*n-1)/2+i+j-n-n)%n+1));return 0;}
[/code]
程序是写给人看的,如果要故作高深,不如用二进制01来写.
3 楼
376923432 [专家分:150] 发布于 2009-12-05 20:46:00
还是不懂 ,它的for循环里面怎么只有两个条件,而且里面的逻辑关系我更是不懂
真的很想知道这个程序到底地怎么个意思 ,有高手箐详细解说 谢谢!!!
4 楼
asambook [专家分:0] 发布于 2009-12-07 19:26:00
把程序写的太绕了。不好。我要是你老板,肯定开你。
5 楼
jcslt [专家分:0] 发布于 2009-12-07 20:29:00
也疑惑中,静等高手
6 楼
gudjhi [专家分:0] 发布于 2012-11-29 19:03:00
谢谢楼主了,请继续努力
[url=http://www.sc115.com/vector]矢量素材[/url],[url=http://www.sc115.com/PPT]PPT模板[/url],[url=http://www.sc115.com]素材中国[/url]
7 楼
tl1116 [专家分:10] 发布于 2012-12-05 16:44:00
选择千锋 选择卓越 千锋3G 手机软件开发培训第一品牌
[url=http://www.mobiletrain.org/]iOS培训[/url] [url=http://www.mobiletrain.org/]北京iOS培训[/url]
我来回复