蓝桥杯 神奇6位数

版权声明:本文内容如有侵权,请联系我删除。博客内容仅供学习参考,不可用于其他用途。转载请注明作者为wybing,地址为 https://blog.csdn.net/qq_41138935/article/details/79601446
标题:神奇6位数


  有一个6位的正整数,它有个很神奇的性质:


  分别用2 3 4 5 6去乘它,得到的仍然是6位数,并且乘积中所包含的数字与这个6位数完全一样!只不过是它们的顺序重新排列了而已。


  请计算出这个6位数。


  这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字)

思路:取出原来的6位数和乘积后的六位数,存入数组,排序,比较数组每一个元素,相同则输出!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int n[6];
int m[6];

int main(){
	int d=1,i,ii,j,t=0,sum; 
	for(i=100000;i<=200001;i++){	//穷举 
	memset(n,0,sizeof(n));			//数组置0 
	t=0;
	ii=i;
	while(ii>0){          			//取i的各位的值存入数组n 
		n[t++]=ii%10;
		ii/=10;
	}
	
	
	for(j=2;j<=6;j++){    //穷举  
		sum=i*j;      
		memset(m,0,sizeof(m));
		t=0;
		while(sum>0){
		m[t++]=sum%10;
		sum/=10;
		}	
		sort(n,n+6);   
		sort(m,m+6);
	
	for(int c=0;c<6;c++){	//比较n,m数组是否相同 
		if(n[c]!=m[c]){     //不同d=0 
			 d=0;
			 break;
		}
		if(c==5)           //比完了,都相同 
			d=1;
	}
	if(d==0) break;
	}
	
	if(d==1)
		printf("%d\n",i);	
}
	return 0;
}

思路: 开一个数组初始化全部为0,把一个6位数取每一位,每一位用过的数字当做数组下标,此下标的数组元素+1;这个数乘了2~6过后的数取每一位,每一位用过的数字当做数组下标,此下标的数组元素-1;如果两次用的数字相同,最后这个数组里面的数又都是0了;最后只需要遍历数组是否全部为0;

#include<stdio.h>  
#include<string.h>  
int flag[10];  
int val[10];  
int main()  
{  
    int check=0 ,i=100000,count=0;  
    memset(flag,0,sizeof(flag));      
    while(i<=200000) //因为200000*6超过了6位数,粗略的减少一点数据  
    {  
        i++;              
        int temp=i;       
        memset(flag,0,sizeof(flag));  
        while(temp)  
        {  
            flag[temp%10]++;  
            temp/=10;     
        }         
        int bb=true;  
        for(int j=2;j<=6;j++)  
        {  
            int temp2=i*j;  
            memcpy(val,flag,sizeof(flag));  
            while(temp2)  
            {  
                val[temp2%10]--;  
                temp2/=10;  
            }                 
            for(int k=0;k<10;k++)   
            {  
                if(val[k]!=0)  
                    bb=false;     
            }  
        }  
        if(bb==true)  
            printf("%d\n",i);         
    }     
    return 0;  
}  

展开阅读全文

没有更多推荐了,返回首页