原题链接:剔除相关数
#include<stdio.h>
int rely(int x,int y) //判断是否相关,相关则返回1,否则0
{
int a[10],b[10],i=0,j=0;
while(x) //这里要分别把要检验的数存储到两个数组中
{
a[i++]=x%10;
x=x/10;
}
while(y)
{
b[j++]=y%10;
y=y/10;
}
if(i!=j) return 0; //开始检验相关性,位数不同不行
else
for(int m=0;m<i;m++)
for(int n=0;n<j;n++)
{
//printf("%d %d\n",a[m],b[n]);
if(a[m]==b[n])
{
a[m]=0;
b[n]=0;
}
}
for(int m=0;m<i;m++)
for(int n=0;n<j;n++)
{
if(a[m]==0&&b[n]==0);
else return 0; //数字不同不行
}
return 1;
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
int a[1000],flag=0,temp,sum=0; //sum是为了None的情况准备
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
{
flag=0; //flag每次置0才能保证去除了所有的相关数
for(int j=i+1;j<n;j++) //此处去除当前位以后的所有相关数
if(rely(a[i],a[j]))
{
a[j]=0;
flag=1;
}
if(flag)a[i]=0; //去除当前位置相关数
}
for(int i=0;i<n-1;i++) //来冒个泡
for(int j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}
}
for(int i=0;i<n;i++)
{
if(a[i])
printf("%d ",a[i]);
sum=sum+a[i];
}
if(sum==0)printf("None");
printf("\n");
}
}0.0分
6 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复