栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

如何将1∽9这九个数字不重复的分成3个百位数,且这三位数分别为最小一个数的一倍、两倍、三倍(正解在第二张图)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将1∽9这九个数字不重复的分成3个百位数,且这三位数分别为最小一个数的一倍、两倍、三倍(正解在第二张图)

来自上海某大学信息大类大一新生的《三连击》(洛谷题库)(被暴击到了。。)

(emmmm竭尽毕生所学T∧T)

(写下了几十行的无效代码) 

(淦,我与编程的缘分到此为止了,唉)

#include
#include
#include
using namespace std;
int numbers(int a) {
	srand((unsigned)time(0));
	a = rand() % 9 + 1;
	return a;
}
int main()
{
	while (1)
	{
		int i;
		int s1, s2, s3;
		int n[8];
		for (i = 0; i < 9; )
		{
			n[i] = numbers(i);
			int j;
			for (j = 0; j < i; )
			{
				if (n[i] == n[j])
				{
					break;
				}
				else
				{
					j++;
				}
			}
			if (i == j + 1)
			{
				i++;
			}
		}
		int z[10];
		z[i] = n[0] * 100 + n[1] * 10 + n[2];
		s2 = n[4] * 100 + n[5] * 10 + n[6];
		s3 = n[7] * 100 + n[8] * 10 + n[9];
		int m[10];
		int u = 0;
		if (s2 == z[i] * 2 && s3 == z[i] * 3)
		{
			m[i] = z[i];
		}
		for (u; u < i; u++)
		{
			if (z[u] == m[i])
			{
				break;
			}

		}
		if (u == i - 1)
		{
			cout << z[i] << " " << s2 << " " << s3 << endl;
		}
	}
	return 0;
}

总的来说就是学的知识不够,想要完成这样的程序还常常被自己不够严密的逻辑牵着走 ,看来要学的东西还很多。。

以下是CSDN上的正确解答:

#include
#include
using namespace std;
bool f[15];

int main() {
	for (int a = 123, b, c; a <= 329; a++) {
		fill(f, f + 10, 0);
		b = 2 * a; c = 3 * a;
		f[a % 10] = f[a / 10 % 10] = f[a / 100] = true;
		f[b % 10] = f[b / 10 % 10] = f[b / 100] = true;
		f[c % 10] = f[c / 10 % 10] = f[c / 100] = true;
		int cnt = 0;
		for (int i = 1; i <= 9; i++)
			if (f[i]) cnt++;
		if (cnt == 9) cout << a << " " << b << " " << c << endl;
	}
	return 0;
}

这是bool类型的数组吗。。还真是没想到

。。。简洁的让我难过

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317438.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号