蓝桥杯 排他平方数

ぐ巨炮叔叔 提交于 2020-02-17 11:06:40

标准开头 菜 勿喷
即使题目比较简单 但是代码肯定有许多不足 还可以简化
重要的是其中判断i和i*i各位数是否有重复和i的各位数是否重复的方法
隐隐感觉会有更高效的方法 过后想出来会更新

#include <stdio.h>
#include <string.h>
int a[10];//装一个数的各位数 
int b[10];//装平方数的各个位数 
void f(long long int n)
{
	//printf("%lld\n",n);
	while(n)
	{
		a[n%10]=1;
		n/=10;
	}
}

void ff(long long int n)
{
	//printf("%lld\n",n);
	while(n)
	{
		b[n%10]=1;
		n/=10;
	}
}

int main()
{
	for(long long int i=100000;i<1000000;i++)
	{
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));//两个数组每次都初始化 
		f(i);
		ff(i*i);
		
		int sum=0,flag=1;
		for(int j=0;j<10;j++)
		{
			sum+=a[j];
		}
		if(sum!=6){
			continue;
		}//如果i不是六位数不同 跳过 
		
		sum=0;
		for(int j=0;j<10;j++)
		{
			if(a[j]==b[j])
			{
				flag=0;
				break;
			}//如果i和i*i有某位相同 跳过 
			sum+=(a[j]+b[j]);
	}
		if(sum==10&&flag==1)printf("%lld %lld %d\n",i,i*i,sum);
		//printf("%lld\n",i);
	}
	return 0;
 } 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!