| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1054 人关注过本帖
标题:C程序设计竞赛训练题 中的一道题,写到最后运行出错啊。。。
只看楼主 加入收藏
liu229118351
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:101
注 册:2013-10-23
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:15 
C程序设计竞赛训练题 中的一道题,写到最后运行出错啊。。。
三组三位完全平方数。将数字1~9分为3组,使每组构成一个3位的平方数,编程求这样的三组三位完全平方数。如:361是19的平方数。
#include<stdio.h>
#include<math.h>
#define N 9
void main()
{
    int i,j,k,m=0;
    int s[3]={0};
    float a[N]={1,2,3,4,5,6,7,8,9},t=0.0,n;
    for( i = 0 ; i < 10 ; i ++)
        for( j = 0 ; j < 10 ; j ++)
            for( k = 0 ;k < 10 ; k ++)
            {
                if(( i == j )||( i == k )||( j == k ))
                    continue ;
                t = a[i] * 100 + a[j] * 10 + a[k];
                n=sqrt(t);
                if( n == (int)(n) )
                {
                    s[m] = t ;
                    m ++ ;
                }
            }
    for( m = 0 ; m < 3 ; m ++)
        printf("%d ",s[m]);
}
这个是我的源程序,总感觉  if(( i == j )||( i == k )||( j == k ))   这个有问题。。求教。。
搜索更多相关主题的帖子: C程序设计 continue include 
2013-11-30 20:34
kevin_01
Rank: 2
等 级:论坛游民
帖 子:36
专家分:83
注 册:2013-11-23
收藏
得分:0 
那就这么来实现三数不相等:
 for( i = 0 ; i < 10 ; i ++)
         for( j = 0 ; j < 10 ; j ++)
             if(i!=j)
             for( k = 0 ;k < 10 ; k ++)
             {
                 if(j!=k)
                 t = a[i] * 100 + a[j] * 10 + a[k];
                ........................

Hello  World !
2013-11-30 21:06
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:15 
题目要求是三个数都得是平方数吧


[fly]存在即是合理[/fly]
2013-11-30 22:53
liu229118351
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:101
注 册:2013-10-23
收藏
得分:0 
回复 3楼 azzbcc
对啊。。。是的啊

单曲循环,需要信心+耐心+恒心
2013-12-02 10:26
liu229118351
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:101
注 册:2013-10-23
收藏
得分:0 
回复 2楼 kevin_01
好像还是有错误。。。运行失败阿。。直接出错推出了

单曲循环,需要信心+耐心+恒心
2013-12-02 10:31
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
if( n == (int)(n) )

n是浮点型的数据吧,这个条件可以成立?

建议这样改:int n = (int)sqrt(t);  if (n*n == t)

其次你这个算法如何保证 9个数字不重复?


[fly]存在即是合理[/fly]
2013-12-02 11:05
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
顶楼上的,楼主的算法如何保证 9个数字不重复?

总有那身价贱的人给作业贴回复完整的代码
2013-12-02 11:06
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:15 
程序代码:
#include <stdio.h>

int main()
{
    // [101,999]的0.5次方为[11,31],即最多有21个
    unsigned n[21], m[21];
    size_t len = 0;
    for( unsigned i=11u; i<=31u; ++i )
    {
        unsigned i2 = i*i;
        unsigned a = i2/1%10;
        unsigned b = i2/10%10;
        unsigned c = i2/100%10;
        if( a!=0 && b!=0 && c!=0 && a!=b && b!=c && c!=a )
        {
            n[len] = i2;
            m[len] = (1u<<a) | (1u<<b) | (1u<<c);
            ++len;
        }
    }

    for( size_t i=0; i<len; ++i )
    for( size_t j=i+1; j<len; ++j )
    for( size_t k=j+1; k<len; ++k )
    {
        if( (m[i]|m[j]|m[k]) == 0x3FE )
            printf( "%u %u %u\n", n[i], n[j], n[k] );
    }

    return 0;
}

输出为
361 529 784

2013-12-02 11:20
liu229118351
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:101
注 册:2013-10-23
收藏
得分:0 
回复 3楼 azzbcc
我本来是想用一个语句实现当i,j,k都不相等时在进行下一语句,可是好像弄错了

单曲循环,需要信心+耐心+恒心
2013-12-02 11:37
liu229118351
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:101
注 册:2013-10-23
收藏
得分:0 
回复 8楼 rjsp
在code::blocks里面好像在for()语句中不能进行类似unsigned i=11u这个。。我用的code::blocks

单曲循环,需要信心+耐心+恒心
2013-12-02 11:39
快速回复:C程序设计竞赛训练题 中的一道题,写到最后运行出错啊。。。
数据加载中...
 
   



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

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