解题思路:
1,先写一个判断两个数是否为相关数的函数,这个简单,就是定义两个数组并赋初值为0,然后把传入函数的数字的每一位数字进行判断,等于n就给数组a[n]加1,最后比较两个数组,如果完全相等,则说明两个数是相关数。
2,主函数中,把输入的数据保存在一个数组中(或者用c++中的vector容器,这个看自己,个人觉得数组简单一点),然后用双循环让每一个数去与除了自己以外其他所有的数作比较,如果是相关数,就给temp加1(temp初值是0),内层循环结束后,如果temp还等于0,就说明a[i](i是外层循环的循环变量)不与任何数互为相关数,则需要找个东西来存放它(参见第3点)。
3,到最后为了方便最后的从小到大的顺序,用C++的set容器来存放数据,直接排列好顺序。
4,到最后判断如果set容器为空的,则说明没有非相关数,输出None即可,不为空则依次输出已经由set排列好的数字。
5,最后别忘了输出一个换行符。
#include<iostream> #include<set> using namespace std; bool fun(int m, int n)//判断两个数是否为相关数的函数 { int a[11] = { 0 }, b[11] = { 0 }, sum = 0; while (m > 0) { a[m % 10]++; m /= 10; } while (n > 0) { b[n % 10]++; n /= 10; } for (int i = 1; i <= 10; i++) { if (a[i] != b[i]) sum++; } if (sum == 0) return true; else return false; } int main() { int w; while (cin >> w && w)//多组数据,输入0结束 { int e, temp = 0, a[1024];//temp作为标记 set<int> b; for (int i = 0; i < w; i++) { cin >> a[i]; } //双循环,让数组中每一个数都去和除了自己的其他数比较,看是否为相关数 for (int i = 0; i < w; i++) { for (int j = 0; j < w; j++) { if (i != j && fun(a[i], a[j])) { temp++;//如果和其他数是相关数,则给temp加1,表示这个数有相关数存在 } } if (temp == 0)//temp=0说明这个数是非相关数 { b.insert(a[i]);//将这个数存放入set容器中 } else temp = 0;//这个数是相关数,则不用存放,给temp更新值,为下一个数继续去做标记 } if (b.empty()) cout << "None";//如果set容器为空,则说明没有非相关数,输出None else { for (auto it = b.begin(); it != b.end(); it++) { cout << *it << " "; } } cout << endl; } return 0; }
将代码可以简化一下:
#include<iostream> #include<set> using namespace std; bool fun(int m, int n) { int a[11] = { 0 }, b[11] = { 0 }, sum = 0; while (m > 0) { a[m % 10]++; m /= 10; } while (n > 0) { b[n % 10]++; n /= 10; } for (int i = 1; i <= 10; i++) { if (a[i] != b[i]) sum++; } if (sum == 0) return true; else return false; } int main() { int w; while (cin >> w && w) { int e, temp = 0, a[1024]; set<int> b; for (int i = 0; i < w; i++) cin >> a[i]; for (int i = 0; i < w; i++) { for (int j = 0; j < w; j++) { if (i != j && fun(a[i], a[j])) temp++; } if (temp == 0) b.insert(a[i]); else temp = 0; } if (b.empty()) cout << "None"; else { for (auto it = b.begin(); it != b.end(); it++) { cout << *it << " "; } } cout << endl; } }
0.0分
0 人评分