1204: 剔除相关数
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 163 Solved: 80
Submit Status Web Board
Description
一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。
Input
多实例测试。每组数据包含一个n(n<1000),和n个int范围内的正整数。若n为0,表示结束。
Output
按从小到大的顺序输出非相关数,若没有非相关数,则输出None。
Sample Input
8213 667 3 213 43 34 677 23322 232 2320
Sample Output
2 3 667 677None
HINT
#include <iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
int zhuanhuan(int n);
using namespace std;
int main()
{
int a[1001];
int n,i,j;
int f;
while(scanf("%d",&n),n!=0)
{
f=0;
int f1;
int f2;
for(i=0; i<n; i++)
scanf("%d",&a[i]);
for(i=0; i<n; i++)
{
f2=zhuanhuan(a[i]);
f1=0;
if(a[i]>=0)
{
for(j=i+1; j<n; j++)
{
if(f2==zhuanhuan(a[j]))
{
f1=1;
a[j]=-1;
}
}
if(f1==1)
a[i]=-1;
}
}
sort(a,a+n);
if(a[n-1]==-1)
printf("None\n");
else
{
for(i=0; i<n; i++)
{
if(a[i]>=0)
{
if(f==0)
{
f=1;
printf("%d",a[i]);
}
else
printf(" %d",a[i]);
}
}
printf("\n");
}
}
return 0;
}
int zhuanhuan(int n)
{
int a[10]= {0};
int i;
while(n>=10)
{
a[n%10]++;
n=n/10;
}
a[n]++;
int s=0;
for(i=0; i<9; i++)
{
if(a[i]!=0)
{
while(a[i]--)
{
s*=10;
s+=i;
}
}
}
return s;
}