免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xyfree
打印 上一主题 下一主题

删帖吧 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-06-22 20:18 |只看该作者
这叫蛮力法
yecheng_110 发表于 2010-06-22 20:15



    有好方法阿,不过得看单位出得起出不起价啊。现在随便什么公司都这个那个的,真这那都行的,它出得起工资么?

论坛徽章:
0
22 [报告]
发表于 2010-06-23 21:22 |只看该作者
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int i=1,res=0;
  5.         int judge(int a);

  6.         for (;i<101;i++)
  7.         {
  8.                 res=judge(i);

  9.                 if (res%2!=0)
  10.                 {
  11.                         printf("%d ",i);
  12.                 }
  13.         }

  14.         printf("\n");

  15.         return 0;
  16. }

  17. int judge(int a)
  18. {
  19.         int res=0;
  20.         for (int i=1;i<=a;i++)
  21.         {
  22.                 if (a%i==0)
  23.                 {
  24.                         res++;
  25.                 }
  26.         }

  27.         return res;
  28. }

复制代码

论坛徽章:
0
23 [报告]
发表于 2010-06-23 21:27 |只看该作者
现在才发现我的代码的答案是1 4 9 16 25 36 49 64 81 100;不知道对不对?

论坛徽章:
0
24 [报告]
发表于 2010-06-23 21:31 |只看该作者
唉 刚才把数字改大一点 运行就慢得很,随便写的东西就是不行呀。

论坛徽章:
0
25 [报告]
发表于 2010-06-23 21:32 |只看该作者
22楼的循环次数浪费了太多了。发个简化的。

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         const int n = 1000;
  5.         int i, j;
  6.         int li[n+1];
  7.         for( i=1; i<=n; ++i )
  8.                 li[i] = 1;
  9.         for( i=2; i<=n; ++i )
  10.         {
  11.                 for( j=i; j<=n; j+=i )
  12.                 {
  13.                         li[j] = li[j]? 0: 1;
  14.                 }
  15.         }
  16.         for( i=1; i<=n; ++i )
  17.         if( li[i] )
  18.                 printf("%d ", i);
  19.         return 0;
  20. }
复制代码

论坛徽章:
0
26 [报告]
发表于 2010-06-23 21:36 |只看该作者
本帖最后由 mgqw 于 2010-06-24 09:39 编辑

有100盏灯,从1~100编上号,开始时所有的灯都是关着的,
第一次,把所有编号是1的倍数的灯的开关状态改变一次;
第二次,把所有编号是2的倍数的灯的开关状态改变一次;
第三次,把所有编号是3的倍数的灯的开关状态改变一次;
以此类推,直到把所有编号是100得倍数的灯的开关状态改变一次。
问,此时所有开着的灯的编号。

  1. int main()
  2. {
  3.         //为了方便观察,只使用a[1]-a[100], j也如此
  4.         //数组内容0代表关灯, 1代表开灯
  5.         int i, j, a[101]={0};
  6.         //循环100次,每次都把第N次所有编号是N的倍数的灯状态改变一次
  7.         for( i=1; i<101; i++ )
  8.                 for( j=i; j<101; j++)
  9.                 {
  10.                         if( j%i==0 )
  11.                         {
  12.                                 a[j] = !a[j];
  13.                         }
  14.                 }
  15.         //输出所有开着的灯也就是数组内容为1的数组编号
  16.         for ( i=1; i<101; i++ )
  17.         {
  18.                 if( a[i]==1 )
  19.                 {
  20.                         printf("a[%d]=%d\t", i, a[i] );
  21.                 }
  22.                
  23.         }
  24.         printf("\n");

  25. }

复制代码
结果:
[mgqw@localhost test]$ ./a.out
a[1]=1        a[4]=1        a[9]=1        a[16]=1        a[25]=1        a[36]=1        a[49]=1        a[64]=1        a[81]=1        a[100]=1

论坛徽章:
0
27 [报告]
发表于 2010-06-23 21:45 |只看该作者
稍微优化一下,好像时间没省什么。
  1. int main()
  2. {
  3.         int i=1,res=0;
  4.         int judge(int a);

  5.         for (;i<100001;i++)
  6.         {
  7.                 res=judge(i);

  8.                 if (res%2!=0)
  9.                 {
  10.                         printf("%d ",i);
  11.                 }
  12.         }

  13.         printf("\n");

  14.         return 0;
  15. }

  16. int judge(int a)
  17. {
  18.         int res=0;
  19.         for (int i=1;i<=a;i++)
  20.         {
  21.                 if (i>a/2)
  22.                 {
  23.                         res++;
  24.                         break;
  25.                 }
  26.                 if (a%i==0)
  27.                 {
  28.                         res++;
  29.                 }
  30.         }

  31.         return res;
  32. }
复制代码

论坛徽章:
0
28 [报告]
发表于 2010-06-23 21:48 |只看该作者
回复 26# mgqw


    强!

论坛徽章:
0
29 [报告]
发表于 2010-06-23 21:54 |只看该作者
包括1和本身在内有奇数个因数的编号的灯是亮的

论坛徽章:
0
30 [报告]
发表于 2010-06-23 23:42 |只看该作者
完全平方数的灯是亮的,只有完全平方数的因数才是奇数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP