| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 979 人关注过本帖
标题:蓝桥杯题解
只看楼主 加入收藏
zhu_zhi
Rank: 2
来 自:广西百色
等 级:论坛游民
帖 子:129
专家分:92
注 册:2013-4-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
蓝桥杯题解
题目标题: 排它平方数

    小明正看着 203879 这个数字发呆。

    原来,203879 * 203879 = 41566646641

    这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。

    具有这样特点的6位数还有一个,请你找出它!

    再归纳一下筛选要求:
    1. 6位正整数
    2. 每个数位上的数字不同
    3. 其平方数的每个数位不含原数字的任何组成数位
我使用C语言编出代码反复的调试、修改,耗时不知N天,终于算出,尽管如此,还是搞不清楚为什么算出。各位高手请帮看一下,能不能使用更简便的方法。
我的代码:

#include<stdio.h>
void main()
{
    _int64 i,t,m,q,j;
    _int64 a[6];
    _int64 b[12];
    for(i=100000;i<=999999;i++)
    {
        t=i;
        m=t%10;
        q=0;
        while(t>0)
        {
            a[q]=m;
            
            t=(t-m)/10;
            m=t%10;
            q++;
        }
        
        
        if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[0]!=a[4]&&a[0]!=a[5]&&a[1]!=a[2]&&a[1]!=a[3]&&a[1]!=a[4]&&a[1]!=a[5]&&a[2]!=a[3]&&a[2]!=a[4]&&a[2]!=a[5]&&a[3]!=a[4]&&a[3]!=a[5]&&a[4]!=a[5])
        {
            t=i*i;
            m=t%10;
            q=0;
            while(t>0)
            {
                b[q]=m;
                t=(t-m)/10;
                m=t%10;
                q++;
            }
            for(q=0;q<=5;q++)
            {
                for(j=0;j<=11;j++)
                {
                    if(a[q]==b[j]) goto loop;
                    else if(a[q]!=b[j]) continue;
                }
                loop:if(q!=6 && j!=12)break;
            }
            if(q==6 && j==12) printf("%I64d----%I64d\n",i,i*i);
        }         
    }            
}

搜索更多相关主题的帖子: 正整数 C语言 
2013-12-30 09:09
zhu_zhi
Rank: 2
来 自:广西百色
等 级:论坛游民
帖 子:129
专家分:92
注 册:2013-4-25
收藏
得分:0 
回复 楼主 zhu_zhi
补充:
639172*639172=408,540,845,584
2013-12-30 09:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9030
专家分:54050
注 册:2011-1-18
收藏
得分:3 
上次在C++论坛有人问过,给你参考一下,因为不是C代码
程序代码:
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    unsigned a[10]={ 0, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
    for( ; std::next_permutation(a+0,a+10); std::reverse(a+6,a+10) )
    {
        unsigned n = a[0]*100000+a[1]*10000+a[2]*1000+a[3]*100+a[4]*10+a[5]*1;
        unsigned rest_flag = 1u<<a[6] | 1u<<a[7] | 1u<<a[8] | 1u<<a[9];

        unsigned long long r = 1ull*n*n;
        for( ; r && ( 1u<<(r%10) & rest_flag ); r/=10 );

        if( r == 0 )
            cout << n << endl;
    }

    return 0;
}
输出
203879
639172
2013-12-30 09:20
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:3 
回复 3楼 rjsp
kan 看不懂咯

hl928452957@gmail点com

2013-12-30 09:32
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:3 
观摩观摩

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-30 09:36
zhu_zhi
Rank: 2
来 自:广西百色
等 级:论坛游民
帖 子:129
专家分:92
注 册:2013-4-25
收藏
得分:0 
回复 3楼 rjsp
你的代码运行出错
2013-12-30 09:53
mic123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:22
专家分:123
注 册:2013-12-23
收藏
得分:3 
有这样一段代码

[ 本帖最后由 mic123 于 2013-12-31 15:57 编辑 ]
2013-12-31 15:56
mic123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:22
专家分:123
注 册:2013-12-23
收藏
得分:0 
有这样一段代码
看看版主的C++没看懂,度娘了一下,这个恐怕学C的看的都比较明白了

程序代码:
int main ( )
{
    long long number;

    int i;
    int j;
    for ( number = 102345; number <= 987654; number++ ) {

        //将 number 转换为 int 型数组
        int arrayNumber[6];
        long long tempNumber = number;
        for (i = 5; i >= 0; i-- ) {
            arrayNumber[i] = tempNumber % 10;
            tempNumber /= 10;
        }

        //判定 number 自身是否存在重复数字
        int tempFlag = 0;
        for (i = 0; i < 6; i++ ) {
            for (j = 0; j < 6; j++ ) {
                if ( (arrayNumber[i] == arrayNumber[j]) && (i != j )) {
                    tempFlag = 1;   //
                    break;
                }
            }
            if ( tempFlag == 1 ) {
                break;
            }
        }
        if ( tempFlag == 1 ) {
            continue;
        }

        //计算出 number 的平方数 squareNumber
        long long squareNumber = number * number;

        //将 squareNumber 转换成数组
        int arrayLength;
        if ( squareNumber / 100000000000 == 0 ) {
            arrayLength = 11;
        }
        else {
            arrayLength = 12;
        }
        int arraySquareNumber[arrayLength];
        long long tempSquareNumber = squareNumber;
        for (i = arrayLength - 1; i >= 0; i-- ) {
            arraySquareNumber[i] = tempSquareNumber % 10;
            tempSquareNumber /= 10;
        }

        //判断 squareNumber 中没有与 number 相同的数字
        tempFlag = 0;
        for (i = 0; i < 6; i++ ) {
            for (j = 0; j < arrayLength; j++ ) {
                if ( arrayNumber[i] == arraySquareNumber[j] ) {
                    tempFlag = 1;
                    break;
                }
            }
            if ( tempFlag == 1 ) {
                break;
            }
        }
        if ( tempFlag == 1 ) {
            continue;
        }
        else {
            
            printf("%d\n",number);
        }
    }

    return 0;
}



[ 本帖最后由 mic123 于 2013-12-31 15:59 编辑 ]
2013-12-31 15:57
xiaozi2013
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:四川成都
等 级:蒙面侠
威 望:6
帖 子:830
专家分:4331
注 册:2013-12-13
收藏
得分:3 
蓝桥杯???
第一次听说!!!

--整天敲那些破代码能找着媳妇儿吗。。。---
2013-12-31 16:04
zhu_zhi
Rank: 2
来 自:广西百色
等 级:论坛游民
帖 子:129
专家分:92
注 册:2013-4-25
收藏
得分:0 
回复 8楼 mic123
你试过你的代码吗?我已调试马上显示出错。
2013-12-31 16:34
快速回复:蓝桥杯题解
数据加载中...
 
   



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

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