题目描述
一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。
输入:多实例测试。每组数据包含一个n(n<1000),和n个int范围内的正整数。若n为0,表示结束。
输出:按从小到大的顺序输出非相关数,若没有非相关数,则输出None。
样例输入 Copy
8 213 667 3 213 43 34 677 2 3 322 232 232 0样例输出 Copy
2 3 667 677 None
程序代码
#include<stdio.h>
int main()
{
	int n;
	while(scanf("%d",&n),n!=0){
		int b[n];
		for(int i=0;i<n;i++){//读入数据并存入数组b中
			scanf("%d",&b[i]);
		}
		for(int i=0;i<n-1;i++){//将数组b按从小到大排序
			for(int j=i+1;j<n;j++){
				if(b[i]>b[j]){
					int s=b[j];
					b[j]=b[i];
					b[i]=s;
				}
			}
		}
		for(int k=0;k<n-1;k++){
			int sum=0,bum=1;//sum计算元素各个位数之和,bum计算元素各个位数乘积
			int e=b[k];
			while(e!=0){
				sum+=(e%10);
				bum*=(e%10);
				e/=10;
			}
			
			for(int l=k+1;l<n;l++){
				int sum1=0,bum1=1;//sum1计算元素各个位数之和,bum1计算元素各个位数乘积
				int r=b[l];
			while(r!=0){
				sum1+=(r%10);
				bum1*=(r%10);
				r/=10;
			}
			if(sum==sum1&&bum==bum1){//当两个数的各个位数之和相等并且各个位数的乘积也相等时,这两个数就满足相关,将两个数都赋值为0
				b[k]=0;
				b[l]=0;
			}
        }
	}
	int flag=0;//flag为标记数
	for(int i=0;i<n;i++){
		if(b[i]!=0){//当数组中元素值不为0即输出该元素
			printf("%d ",b[i]);
			flag=1;//同时flag赋为1
		}
	}
	if(flag==0) printf("None");//当flag为0说明没有非相关数,那么就输出None
		printf("\n");//每完成一个案例测试就换行
}
	return 0;
}运行结果




















