您的位置:首页 > 其它

洛谷P1618 三连击(升级版)

2018-01-03 22:26 495 查看

题目

题目描述

将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。

输入输出格式

输入格式

三个数,A B C。

输出格式

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

输入输出样例

输入样例

1 2 3

输出样例

192 384 576

219 438 657

273 546 819

327 654 981

说明

保证A<B<C

分析

我的方法是枚举所有的三位数然后挨个试。
最暴力做法没有之一的好吧。
满足比例,基数一定是整数。
关键位置(几乎所有位置)全部给出了相关注释。
上代码(码风一如既往)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

bool used[10];
//检查数字是否齐全的
bool check(int,int,int);
//检查函数
bool answer;
//标记是否有答案
int main()
{
int a;
int b;
int c;
//比例
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
//读入
int a1;
int a2;
int a3;
//那三个数
answer=false;
//初始化
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
for(int k=1;k<=9;k++)
{
if(i==j||i==k||j==k)//不可以一样(先看省时间,其实省不省一样)
continue;

a1=i*100+j*10+k;//求出最小的数

int x;//基数

x=a1/a;//求基数

if(a1%x!=0||a!=a1/x)//看看能不能整除,出小数肯定不行啊
continue;

a2=x*b;//求第二个

a3=x*c;//求第三个

if(check(a1,a2,a3)==false)//检查结果
continue;

printf("%d %d %d\n",a1,a2,a3);//输出

answer=true;//标记
}

if(answer==false)//没有
printf("No!!!");

return 0;
}

bool check(int u,int v,int w)
{
memset(used,false,sizeof used);//初始化

if(u/1000!=0)
return false;
if(v/1000!=0)
return false;
if(w/1000!=0)
return false;
//超过1000
int i;
//这个是看数字的
i=u%10;
if(used[i]==true||i==0)
return false;
used[i]=true;
//个位
i=u/10%10;
if(used[i]==true||i==0)
return false;
used[i]=true;
//十位
i=u/100;
if(used[i]==true||i==0)
return false;
used[i]=true;
//百位
//第一个数
i=v%10;
if(used[i]==true||i==0)
return false;
used[i]=true;
//个位
i=v/10%10;
if(used[i]==true||i==0)
return false;
used[i]=true;
//十位
i=v/100;
if(used[i]==true||i==0)
return false;
used[i]=true;
//百位
//第二个数
i=w%10;
if(used[i]==true||i==0)
return false;
used[i]=true;
//个位
i=w/10%10;
if(used[i]==true||i==0)
return false;
used[i]=true;
//十位
i=w/100;
if(used[i]==true||i==0)
return false;
used[i]=true;
//百位
//第三个数
return true;
}
可以算个数学题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: