| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1305 人关注过本帖
标题:新人求助TAT:计算并输出能写成两个数平方之和的所有三位数的个数。
只看楼主 加入收藏
二水子
Rank: 2
等 级:论坛游民
帖 子:6
专家分:18
注 册:2016-11-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
新人求助TAT:计算并输出能写成两个数平方之和的所有三位数的个数。
#include"stdio.h"
int main() {
  int i, j, k, c = 0;
   for (i = 1; i <= 32; i++)
    for (j = i; j <= 32; j++) {
      k = i * i + j * j;
      if (k > 99 && k < 1000) {
        c++;
      }
    }
  printf("%d", c);
  return 0;
}
正确的答案是274,我的是350。。。
我写的代码是这样的。。。但是里面有重复的。。。
怎么能避免重复呢?
给好心人端茶~
搜索更多相关主题的帖子: include 
2016-11-16 15:30
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
两个思路。

1.加个重复判断,把前面的k记录下来

2.for number in [100, 1000):  judge(number)


[fly]存在即是合理[/fly]
2016-11-16 15:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
既然知道重复了,……

程序代码:
#include <stdio.h>

int main( void )
{
    unsigned count = 0;

    unsigned char flag[1000] = { 0 };
    for( unsigned a=1; a*a+a*a<1000; ++a )
    {
        for( unsigned b=a; a*a+b*b<1000; ++b )
        {
            if( a*a+b*b>=100 && !flag[a*a+b*b] )
            {
                flag[a*a+b*b] = 1;
                ++count;
            }
        }
    }
    printf( "%u\n", count );

    return 0;
}

2016-11-16 15:59
二水子
Rank: 2
等 级:论坛游民
帖 子:6
专家分:18
注 册:2016-11-2
收藏
得分:0 
回复 3楼 rjsp
是不是flag[a*a+b*b]如果等于1就说明这个数已经有过了?感觉又得到了新技能~谢谢大佬~给大佬递茶~
2016-11-16 20:57
快速回复:新人求助TAT:计算并输出能写成两个数平方之和的所有三位数的个数。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069099 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved