柚子


私信TA

用户名:2201986113

访问量:13730

签 名:

2201986113

等  级
排  名 1292
经  验 3001
参赛次数 0
文章发表 22
年  龄 17
在职情况 学生
学  校 西安电子科技大学
专  业

  自我简介:

解题思路: 

    简要思路:概括

          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,最后别忘了输出一个换行符


注意事项:

            我用了temp来做标记,具体细节再代码注释中,欢迎讨论,提出更好的意见!

参考代码:

#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 人评分

  评论区

  • «
  • »