洛谷P1618 三连击(升级版)
2022/2/4 6:12:30
本文主要是介绍洛谷P1618 三连击(升级版),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这个题目可是有意思的很,大致意思如下
:给出一到九排成三个三位数,然后满足A:B:C的比值,也就是说这三个三位数中都必须遍历1到9才可以,并且是升序排列,那怎么做呢?
我先给出最开始的思路(失败)
:给定二维数组甚至三维数组(拿输出阳历来看无非是一个长度为4的数组里面每个数组元素又包括三个小数组)
当然,写了半天我选择放弃,根本写不出来;
于是就有了一个很有趣的解法:
从100到999开始遍历(123~987也可),如果满足这个数取余A是0的话,就让其余两个数等于i/A*B和i/A*C(i代表这个数)
然后在满足其余两个数都在题目条件之内中,定义了九个数组用来存放这三个百位数的各个数字,然后,精彩一幕来了,
为了确保这三个百位数都可以遍历1到9,我们就采取这九个数组的和与这九个数组的乘积等于1~9的和与9!;
然后输出满足条件的i,j,k就可以了
附上代码
:
#include<bits/stdc++.h> using namespace std; int a,b,c,flag=0; int j,k; int main() { scanf("%d%d%d",&a,&b,&c); for(int i=100;i<=999;i++) { if(i%a==0) { j=i/a*b; k=i/a*c; if(j>=100&&j<=999&&k>=100&&k<=999) { int l[10],sum=0,xx=1; l[1]=i/100; l[2]=i/10%10; l[3]=i%10; l[4]=j/100; l[5]=j/10%10; l[6]=j%10; l[7]=k/100; l[8]=k/10%10; l[9]=k%10; for(int _i=1;_i<=9;_i++) { sum+=l[_i]; xx*=l[_i]; } if(sum==45&&xx==362880) { flag=1; printf("%d %d %d\n",i,j,k); } } } } if(flag==0)printf("No!!!"); return 0; }
这篇关于洛谷P1618 三连击(升级版)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性
- 2024-05-29哪些无用敏捷指标正在破坏敏捷转型?
- 2024-05-29鸿蒙原生应用再新丁!新华社 入局鸿蒙
- 2024-05-29设计模式 之 迭代器模式(Iterator)