解题思路:我的想法比较简单,对于输入的每个数进行长度判断,如123的长度是3,23的长度是2,如果两个数的长度不相等,那么就一定不是相关数了;如果长度相等也不一定是相关数,我们还要判断该数与另一个数子字符是不是能够对应的上,如果能对应得上,那么就是相关数了,对这些数进行标记,不要输出这些数就可以了

下面有详细的解析,有疑问欢迎留言!

注意事项:

参考代码:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;	//数字个数 
const int maxn=10001;
int Length(int n){	/*每个数的长度  如100长度是3*/ 
	int len=0;
	while(n){
		n/=10;
		len++;
	}
	return len;
}
int Equal(int n,int m){	/* 判断每两个数的是否相等*/ 
	int M[21],N[21];	//保存两个数分解出来的数 
	int t=0,k=0;
	while(n){		/*因为长度是相等的,所以只要一个数满足不为零就可以了*/ 
		N[t]=n%10;
		M[t++]=m%10;
		n/=10;
		m/=10;
	}
	sort(N,N+t);	/*进行从小到大排序*/ 
	sort(M,M+t);
	for(int i=0;i<t;i++){	/*如果两个数分解出来的数不相等 说明两个数不相关*/ 
		if(N[i]!=M[i])
			return 0;
	}
	return 1;	/*两个数相等,返回真*/ 
}
int main(){
	while(cin>>n&&n){
		int a[maxn];
		for(int i=0;i<n;i++)
			cin>>a[i];
		sort(a,a+n);	/*进行从小到大排序,主要方便输出*/ 
		int Len[maxn],flag[maxn];	/*Len[] 保存每个数的长度,flag[]对相关数进行标记*/ 
		memset(Len ,0 ,sizeof(Len));	/*数组清零*/ 
		memset(flag ,0 ,sizeof(flag));	/*数组清零*/ 
		for(int i=0;i<n;i++){
			Len[i]=Length(a[i]);	/*求每个数的长度*/ 
		}
		for(int i=0;i<n;i++){		/*暴力解题*/ 
			for(int j=i+1;j<n;j++){
				if(Len[i]==Len[j]){	/*长度不相等就跳过了*/ 
					if(Equal(a[i],a[j])){	/*满足相关数进行标记*/ 
						flag[i]=1;
						flag[j]=1;
					}
				}
			}
		}
		int Ans=0;	/*用来判断是不是有些数不是相关数*/ 
		for(int i=0;i<n;i++){
			if(flag[i]==0){
				cout<<a[i]<<" ";
				Ans++;
			}
		}
		if(Ans==0)
			cout<<"None";
		cout<<endl;
	}
	return 0;
}

记得点赞哦!

点赞(12)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论