题目描述
一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。
输入:多实例测试。每组数据包含一个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){//当两个数的各个位数之和相等并且各个位数的乘积也相等时,这两个数就满足相关,将两个数都赋值为0b[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说明没有非相关数,那么就输出Noneprintf("\n");//每完成一个案例测试就换行
}return 0;
}