随手练——洛谷-P1008 / P1618 三连击(暴力搜索)
1.普通版

第一眼看到这个题,我脑海里就是,“我们是不是在哪里见过~”,去年大一刚学C语言的时候写过一个类似的题目,写了九重循环。。。。就像这样(在洛谷题解里看到一位兄台写的。。。。超长警告,慎重点开)
#include <stdio.h>
#include <cstdlib>
int main()
{
int i[];
for (i[] = ; i[] <= ; i[]++)
{
for (i[] = ; i[] <= ; i[]++)
{
int p1=;
if (i[] == i[]) p1 = ;
if (p1 != ) {
for (i[] = ; i[] <= ; i[]++)
{
int p2=;
for (int j2 = ; j2 < ; j2++) if (i[] == i[j2]) p2 = ;
if (p2 != ) {
for (i[] = ; i[] <= ; i[]++)
{
int p3=;
for (int j3 = ; j3 < ; j3++) if (i[] == i[j3]) p3 = ;
if (p3 != ) {
for (i[] = ; i[] <= ; i[]++)
{
int p4=;
for (int j4 = ; j4 < ; j4++) if (i[] == i[j4]) p4 = ;
if (p4 != ) {
for (i[] = ; i[] <= ; i[]++)
{
int p5=;
for (int j5 = ; j5 < ; j5++) if (i[] == i[j5]) p5 = ;
if (p5 != ) {
for (i[] = ; i[] <= ; i[]++)
{
int p6=;
for (int j6 = ; j6 < ; j6++) if (i[] == i[j6]) p6 = ;
if (p6 != ) {
for (i[] = ; i[] <= ; i[]++)
{
int p7=;
for (int j7 = ; j7 < ; j7++) if (i[] == i[j7]) p7 = ;
if (p7 != ) {
for (i[] = ; i[] <= ; i[]++)
{
int p8=;
for (int j8 = ; j8 < ; j8++) if (i[] == i[j8]) p8 = ;
if (p8 != ) {
//printf("%d %d %d %d %d %d %d %d %d\n", i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8]);
int a = * i[] + * i[] + i[];
int b = * i[] + * i[] + i[];
int c = * i[] + * i[] + i[];
double d1 = double(a) / b;
double d2 = double(c) / b;
if (d1 == 0.5 && d2 == 1.5)
{
printf("%d %d %d\n", a, b, c);
//system("pause");
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
system("pause");
return ;
}
假设这三个数是 x : y : z = 1 : 2 : 3,那么z最大可以为987,那么x最大到329(其实比329还要小几个数,因为数字重复了,懒得去抠了),那就好办了,x 从123循环到329,判重就完事了。
#include <iostream>
#include <string.h>
using namespace std;
int a[];
//判重,且不能带0
int IsRepeat(int x) {
memset(a, , sizeof(int) * );
while (x) {
int t = ++a[x % ];
if (t == || a[] == )
return ;
x /= ;
}
return ;
}
int IsRepeat2(int x,int y,int z) {
memset(a, , sizeof(int) * );
while (x) {
a[x % ]++; a[y % ]++; a[z % ]++;
if (a[] > ) return ;
x /= ; y /= ; z /= ;
}
for (int i = ; i < ; i++)
if (a[i] > ) return ;
return ;
}
int main() {
//x,y,z 1:2:3,z最大可以为987,那么1最大到329
for (int x = ; x <= ; x++) {
if (IsRepeat(x)) {
continue;
}
//如果x不重复,y,z 也不会重复
int y = x * ; int z = x * ;
if (!IsRepeat2(x, y, z)) {
cout << x << " " << y << " " << z << endl;
}
}
return ;
}
2.升级版

就是把原来的比例从1:2:3,变成了A:B:C。
思路还是差不多,中间continue判断,写的好像有点乱,但是确实不能少。
#include <iostream>
using namespace std;
bool IsRepeat(int x) {
int a[] = { };
while (x) {
int t = a[x % ]++;
if (t == || a[] == )
return true;
x /= ;
}
return false;
}
bool IsRepeat3(int x, int y, int z) {
int a[] = { };
while (x) {
a[x % ]++; a[y % ]++; a[z % ]++;
if (a[] > ) return true;
x /= ; y /= ; z /= ;
}
for (int i = ; i < ; i++)
if (a[i] > ) return true;
return false;
}
int main() {
int A, B, C, flag = ;
cin >> A >> B >> C;
for (int i = ; i < ; i++) {
int j, k;
if (IsRepeat(i))continue; if (i * B % A == ) j = i * B / A;
else continue; if (j > )continue; if (j*C%B == ) {
k = j * C / B;
if (k > || IsRepeat3(i, j, k))continue;
flag = ;
cout << i << " " << j << " " << k << endl;
}
}
if (!flag)cout << "No!!!" << endl;
return ;
}
随手练——洛谷-P1008 / P1618 三连击(暴力搜索)的更多相关文章
- 随手练——洛谷-P1151(枚举与暴力搜索)
枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...
- 随手练——洛谷-P1002 过河卒(动态规划入门)
题目链接:https://www.luogu.org/problemnew/show/P1002 题目还算良心,提醒了结果可能很大,确实爆了int范围, 这是一开始写的版本,用递归做的,先给地图做标记 ...
- 随手练—— 洛谷-P2945 Sand Castle(贪心)
题目链接:https://www.luogu.org/problemnew/show/P2945 (原题 USACO) 要求钱最少,就是试着让M和B的离散程度最小(我自己脑补的,就是总体更接近,我不知 ...
- 洛谷 p1008三连击
洛谷 p1008三连击 题目背景 本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序. 题目描述 将1,2, ⋯,9共99个数分成3组,分别组成3个三位数, ...
- 【题解】洛谷P1120 小木棍(搜索+剪枝+卡常)
洛谷P1120:https://www.luogu.org/problemnew/show/P1120 思路 明显是搜索题嘛 但是这数据增强不是一星半点呐 我们需要N多的剪枝 PS:需要先删去超出50 ...
- 【题解】洛谷P1731 [NOI1999] 生日蛋糕(搜索+剪枝)
洛谷P1731:https://www.luogu.org/problemnew/show/P1731 思路 三重剪枝 当前表面积+下一层表面积如果超过最优值就退出 当前体积+下一层体积如果超过总体积 ...
- 和小哥哥一起刷洛谷(5) 图论之深度优先搜索DFS
关于dfs dfs伪代码: void dfs(s){ for(int i=0;i<s的出度;i++){ if(used[i]为真) continue; used[i]=1; dfs(i); } ...
- 和小哥哥一起刷洛谷(4) 图论之广度优先搜索BFS
关于bfs: 你怎么会连这个都不知道!!!自己好好谷歌一下!!!(其实我也刚学) bfs伪代码: while(队列非空){ 取出队首元素u; 弹出队首元素; u染色为黑色; for(int i=0;i ...
- 洛谷p1008 三连击
https://www.luogu.org/problemnew/show/P1008 题目描述 将1,2,3,4,5,6,7,8,9共9个数分成3组,分别组成3个三位数,且使这3个三位数的值构成1: ...
随机推荐
- Java中名词的解释
在上一篇中说到了Java的四大特性,里面出现了很多名次,包括以后学习Java中也会出现很多常用到的名次,对初学者来说可能不知道是什么意思,或者是对这些刺耳的理解不是特别透彻,这里我就我自己的理解来解释 ...
- MySQL 索引知识总结
将 mysql 的索引以书本的索引类比比较贴切,要找到一个关键字为xxx 的条目,首先翻到索引中查找有哪些页码涉及到,无疑就缩小了范围.在这个小范围内再寻找符合条件的数据,效率就会提高许多. mysq ...
- java poi处理新版xlsx后缀的excel
jar包下载地址http://poi.apache.org/download.html#POI-3.17,我把下载文件中的所有jar包都导入项目中才能跑 参考以下博客 https://www.cnbl ...
- 基于.Net下整合IBatis
一. 准备工作 1. 点击此下载支持.Net4.0的 iBatis.Net,工程中引用release文件夹下的dll 最新版(目前已不再更新),有稍作修改使其支持.NET4.0 2. 点击此可查看 i ...
- MySQL之多表查询练习
一.表格 表一 emp 表二 dept 表三 salgrade; 表四 年度利润表 二.习题 1. 查出至少有一个员工的部门.显示部门编号.部门名称.部门位置.部门人数. 2. 列出所有员工的姓名及 ...
- 【转载】windows 下重置 mysql 的 root 密码
今天发现 WordPress 连接不上数据库,登录 window server 服务器查看,所有服务均运行正常. 使用 root 账号登录 mysql 数据库,结果提示密码不匹配.我突然意识到,服 ...
- 新安装的Apache和php,测试可以解析phpinfo,但是无法打开drupal网站
没有去掉php.ini中mysql相关的一些扩展的注释
- PHP在foreach中对$value赋值无效,应该用 ‘键’ 或者 &$value的形式
首先我们看下这段代码: foreach ($data as$value) { $value['name'] = 'Hehe'; } $data中原始的数据为: array(1) { [0] => ...
- 改bug后 fix bug 时,一个不错的修复描述模板
*问题原因:* 问题出现的原因.*解决方法:* 问题的解决方案.*影响分支:* 影响哪些分支. *相关修改:* 具体的修改文件列表.*自测结果:* 自行测试了哪些用例,将大概步骤描述出来. *影响功能 ...
- Grunt入门学习之(3) -- Gruntfile具体示例
经过前面的学习,将测试的Gruntfile整合在一起! /** * Created by Administrator on 2017/6/22. */ module.exports = functio ...