文章转载前需和原作者联系,否则追究法律责任

题目链接:https://www.luogu.com.cn/problem/P1008

首先我们来分析一下题目。要求是枚举三个数,比例为1:2:3,且各个数字由1-9组成。

我们采用枚举的方式来进行这道题目。首先,数字满足两个条件(比例为1:2:3,且各个数字由1-9组成),我们只需要枚举其中的一种条件,然后判断第二种条件是否满足即可。

举例:枚举数字比例1:2:3,然后进行判断数位是否由1-9组成。代码框架:

#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,c;
for(int a=123;a<=333;a++){
b=2*a;c=3*a;
...
cout<<a<<' '<<b<<' '<<c<<endl;
}
}

最重要的是来判断各个数位是否由1-9组成。此时,我们可以使用一个函数,叫做sprintf

我们知道,printf函数可以向标准输出输出内容,例如:

假设a=2

printf("a=%d",a);

此时标准输出会显示:a=2

sprintf的用法和printf类似,因此,我们如果这样写:

sprintf(s,"a=%d",a);

如果s是一个C风格字符串,那么s字符串将会变为:“a=2”。

是否发现了什么?如果我们这样写:

sprintf(s,"%d%d%d",a,b,c);

那么,如果a=123,b=456,c=789,那么s将会变为:“123456789”。事实上,sprintf经常用于把数字转为字符串。

这样,我们把三个数连在了一起,这样就可以从s[0]枚举到s[9],枚举各个数字出现的个数即可。

完整代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,c;
for(int a=123;a<=333;a++){
b=2*a;c=3*a;
char s[10];
sprintf(s,"%d%d%d",a,b,c);
int flag[10];
memset(flag,0,sizeof(flag));
for(int i=0;i<9;i++)
flag[s[i]-'0']++;//统计数字的个数
for(int i=1;i<=9;i++){
if(flag[i]!=1)goto next;//出现次数不为1则跳过
}
cout<<a<<' '<<b<<' '<<c<<endl;
next:
continue;
}
}

至于另一种解法,也就是只枚举1-9的全排列,然后分段输出三位数,这里也简单阐述一下。

枚举全排列可以使用递归搜索的方法,框架大家都应该很清楚,我也不写了。当然,也可以使用STL算法库的next_permutation函数,进行全排列的计算。

我们把全排列计算出后,就把9位分为三段,判断比例是否为1:2:3。

代码如下:(使用next_permutation计算全排列)

注:总枚举次数为9的阶乘,也就是362880

#include<bits/stdc++.h>
using namespace std;
int s[9]={1,2,3,4,5,6,7,8,9};
int main(){
for(int i=0;i<362880;i++){
int a=s[0]*100+s[1]*10+s[2];
int b=s[3]*100+s[4]*10+s[5];
int c=s[6]*100+s[7]*10+s[8];
if((b==2*a) && (c==3*a)){
printf("%d %d %d\n",a,b,c);
}
next_permutation(s,s+9);
}
return 0;
}

【NOIP1998】 三连击 题解的更多相关文章

  1. 洛谷P1008三连击 题解

    题目传送门 使用dfs搜索,搜索9个数字,注意回溯...最后判断是否符合条件,输出. #include<bits/stdc++.h> using namespace std; ],a[]; ...

  2. 【noip1998】题解:2的幂次方

    思路:设递归函数dfs(x)用于输出x的幂次方 最容易的思路:0不输出,1输出为2(0),2输出2,剩下的递归执行. 每一次递归:例如7,拆分为4+3,先拆出最大的是2的次方的数出来,输出4,再把3分 ...

  3. 三连击(NOIP1998)

    题目链接:三连击 典型的打表题,但cgg今天不是教你怎么打表的,而是教你正解. 这题方法多样,比如递归求解也行,反正数据也不大. 在这里我提供另一种思路,我们枚举第一个数,即最小的一个数,然后分解它以 ...

  4. NOIP1998提高组 题解报告

    T1 进制位 题目大意:自己看吧 首先让我们来看两个引理: 如果有解,则进制一定为\(n - 1\) 如果有解,则字母一定表示\(0\) 至 \(n - 1\) 的数 证明如下: 因为有 \(n - ...

  5. 题解【洛谷P1618】 三连击(升级版)

    设三个数分别为n1.n2.n3,因为三个数的比为A:B:C,取一份量i,使得A·i=x,B·i=y,C·i=z(·是*的意思). 所以我们的代码只需要枚举i,并以此判断n1.n2.n3是否为三位数且包 ...

  6. C++算法代码——三连击[NOIP1998 普及组]

    题目来自:https://www.luogu.com.cn/problem/P1008 题目背景 本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序. 题目 ...

  7. NC16783 [NOIP1998]拼数

    NC16783 [NOIP1998]拼数 题目 题目描述 设有 \(n\) 个正整数(\(n ≤ 20\)),将它们联接成一排,组成一个最大的多位整数. 例如:\(n=3\) 时,\(3\) 个整数 ...

  8. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  9. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

随机推荐

  1. Go版本依赖--版本选择机制

    目录 1. 版本选择机制 2.依赖包版本约定 2.1 Go module 之前版本兼容性 2.2 Go module 之后版本兼容性 3. 版本选择机制 3.1 最新版本选择 3.2 最小版本选择 1 ...

  2. Kickstart部署多系统

    原文转自:https://www.cnblogs.com/itzgr/p/10029587.html作者:木二 目录 一 准备 1.1 完整架构:Kickstart+DHCP+HTTP+TFTP+PX ...

  3. uni-app 小程序从零开始的开发流程

    前言 本文基于 HBuilderX 3.1.22 + 微信开发者工具 1.05.2106300为主要内容进行说明. 文档版本:1.0.0 更新时间:2021-09-03 15:32 一.准备 uni- ...

  4. Jenkins 使用PowerShell插件部署Net5项目

    Jenkins安装 PowerShell plugin 插件 新建自由项目 拖到 构建 处,添加 PowerShell 构建 贴入下方脚本即可 # 变量 $ProjectPath = "E: ...

  5. Pycharm去除波浪线等相关操作

  6. Mysql - You can't specify target table '表名' for update in FROM clause 错误解决办法

    背景 在MySQL中,写SQL语句的时候 ,可能会遇到 You can't specify target table '表名' for update in FROM clause 这样的错误 错误含义 ...

  7. docker-compose up -d nginx 报错

    在阿里云ECS上创建nginx容器时,报错如上图. The solution: In your Dockerfile, before running any apt commands, add the ...

  8. 【转】shell脚本中echo显示内容带颜色的实现方法

    shell脚本中echo显示内容带颜色的实现方法 shell脚本里使用echo输出颜色  

  9. UVA 1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)

    https://vjudge.net/problem/UVA-1599 给一个n个点m条边(2<=n<=100000,1<=m<=200000)的无向图,每条边上都涂有一种颜色 ...

  10. CentOS8部署tftp

    tftp:简单文本传输协议,而ftp:文本传输协议.可以把tftp看成是ftp的精简版.tftp用于免登录传输小文件,tftp服务端监听在udp协议的69端口tftp简单的工作原理: tftp服务端与 ...