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

本文分享了一位大一新生在解决《三连击》编程题时的经历,从复杂无效代码到领悟使用布尔数组简化问题的过程,揭示了编程中逻辑清晰的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

#include<iostream>
#include<cmath>
#include<ctime>
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<iostream>
#include<algorithm>
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类型的数组吗。。还真是没想到

。。。简洁的让我难过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值