P1008 [NOIP1998 普及组] 三连击

了解题目

题目链接

[NOIP1998 普及组] 三连击 - 洛谷

题目

输入格式

输出格式   

若干行,每行 33 个数字。按照每行第 11 个数字升序排列。

分析题目

本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。

输入样例        

输出样例

192 384 576
* * *
...

* * *
(剩余部分不予展示)

解题思路

需要注意的是,这种暴力枚举的方法并不是最优的解法,因为其时间复杂度较高。在这道题目中,由于数据规模较小,使用暴力枚举可以通过本题。但是,如果数据规模变大,暴力枚举就会变得非常耗时,需要寻找更优秀的算法。

AC代码

#include <bits/stdc++.h>
using namespace std;
int main() {
//  string s1[3] = {"i", "j", "k"}, d1[3] = {"/100", "/10%10", "%10"} ;
//  string ans[9] = {"i/100", "i/10%10", "i%10", "j/100", "j/10%10", "j%10", "k/100", "k/10%10", "k%10",};
//  for (int i = 0; i < 3; i++) {
//      for (int j = 0; j < 3; j++) {
//          cout << "\"" << s1[i] + d1[j] << "\"" << ",";
//      }
//  }
//  for (int i = 0; i < 9; i++) {
//      for (int j = 0; j < 9; j++) {
//          if (i != j) {
//              cout << ans[i] << "==" << ans[j] << "||";
//          }
//      }
//  }
	int i, j, k ;
	for (i = 123; i < 333; i++) {
		j = i * 2;
		k = i * 3;
		if (i/100==i/10%10||i/100==i%10||i/100==j/100||i/100==j/10%10||i/100==j%10||i/100==k/100||i/100==k/10%10||i/100==k%10||i/10%10==i/100||i/10%10==i%10||i/10%10==j/100||i/10%10==j/10%10||i/10%10==j%10||i/10%10==k/100||i/10%10==k/10%10||i/10%10==k%10||i%10==i/100||i%10==i/10%10||i%10==j/100||i%10==j/10%10||i%10==j%10||i%10==k/100||i%10==k/10%10||i%10==k%10||j/100==i/100||j/100==i/10%10||j/100==i%10||j/100==j/10%10||j/100==j%10||j/100==k/100||j/100==k/10%10||j/100==k%10||j/10%10==i/100||j/10%10==i/10%10||j/10%10==i%10||j/10%10==j/100||j/10%10==j%10||j/10%10==k/100||j/10%10==k/10%10||j/10%10==k%10||j%10==i/100||j%10==i/10%10||j%10==i%10||j%10==j/100||j%10==j/10%10||j%10==k/100||j%10==k/10%10||j%10==k%10||k/100==i/100||k/100==i/10%10||k/100==i%10||k/100==j/100||k/100==j/10%10||k/100==j%10||k/100==k/10%10||k/100==k%10||k/10%10==i/100||k/10%10==i/10%10||k/10%10==i%10||k/10%10==j/100||k/10%10==j/10%10||k/10%10==j%10||k/10%10==k/100||k/10%10==k%10||k%10==i/100||k%10==i/10%10||k%10==i%10||k%10==j/100||k%10==j/10%10||k%10==j%10||k%10==k/100||k%10==k/10%10||
		    (i / 100) * (i / 10 % 10) * (i % 10 ) * (j / 100) * (j / 10 % 10) * (j % 10 ) * (k / 100) * (k / 10 % 10) * (k % 10 ) == 0 ) {
			//循环出来的结果 手动再把所有为零的情况写上 0×任何数为零
			continue;//补集
		}
		cout << i << " " << j << " " << k << endl;
	}
	return 0
}

题目总结

知识点

        模拟 枚举

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值