排它平方数~

如题:

小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位

答案是一个6位的正整数。

直接上代码:

#include <stdio.h>

int main()

{
    
    

    long long i,j,k,m,n;
    
    int x=1,y=1;//备用
    
    long long a[6];//这是给那几个每个数位都是不同的数准备的 
    
    long long b[12];//这是给那些数的平方准备的,六位数平方最大也不超过十二位 
    
    for(i = 100000; i < 999999; i++){
    
    
    
        j = i;
        
        for(n=0;j>0;n++)
        {
    
    
        
        	k = j%10;
        	
        	a[n] = k;//把i的每一位都放到a[]中去 
        	
        	j = j/10;
        	
		}
        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])
            
			//上面是笨方法,本来我认为用了个自以为很方便的方法,然后做完了之后,找bug找了一个多小时,没找出来。用了笨方法就行了。。(实际是我菜) 
			{
    
    
                j = i*i;
                
                k = j%10;
                
                n = 0;
                
                while(j > 0){
    
    
                
                    b[n] = k;//把b存进去
                    
                    j = j/10;
                    
                    k = j%10;
                    
                    n++;
                }
                
                for(n = 0; n <= 5; n++){
    
    
                
                    for(m = 0; m <= 11; m++){
    
    //比较a和b是否有重合
                    
                        if(a[n] == b[m]) goto loop;
                    }
                    
                    loop:if(n!=6 && m!=12)break;
                    
                }
                if(n == 6 && m == 12&&i!=203879)
                
				{
    
    
					printf("%lld\n",i);//没有的话就输出
				}
            }
    }
}

下面是运行图:
在这里插入图片描述
啊。做题用了50分钟左右,运行不出结果,慢慢慢慢纠正找错,debug用了一个多小时!

xdm!以后谨慎写代码!

猜你喜欢

转载自blog.csdn.net/FG_future/article/details/112411258