华师一附中OI组
标题:
P1618 三连击(升级版)
[打印本页]
作者:
admin
时间:
2018-5-13 13:51
标题:
P1618 三连击(升级版)
https://www.luogu.org/problemnew/show/P1618
题目描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。
//感谢黄小U饮品完善题意
输入输出格式
输入格式:
三个数,A B C。
输出格式:
若干行,每行3个数字。按照每行第一个数字升序排列。
输入输出样例
输入样例#1:
1 2 3
输出样例#1:
192 384 576
219 438 657
273 546 819
327 654 981
说明
保证A<B<C
作者:
倚窗倾听风吹雨
时间:
2018-6-27 10:05
闻子安
#include<iostream>
using namespace std;
int m,flag,q=0,i,j,k,a[10];
float b,c,d;
int main()
{
cin>>b>>c>>d;
for(i=123; i<=329; i++)
{
flag=1;for(m=1; m<=9; m++)a[m]=0;
j=i*c/b;
k=i*d/b;
a[i/100%10]=i/100%10;
a[i/10%10]=i/10%10;
a[i/1%10]=i/1%10;
a[j/100%10]=j/100%10;
a[j/10%10]=j/10%10;
a[j/1%10]=j/1%10;
a[k/100%10]=k/100%10;
a[k/10%10]=k/10%10;
a[k/1%10]=k/1%10;
for(m=1; m<=9; m++)
if(a[m]==0)flag=0;
if(flag)
{q=1;cout<<i<<" "<<j<<" "<<k<<endl;}
}
if(q==0)cout<<"No!!!";
return 0;
}
复制代码
作者:
admin
时间:
2018-6-27 11:32
若是加强版 比例为 ABC的话 此题有问题
作者:
倚窗倾听风吹雨
时间:
2018-6-28 08:45
但是我AC了啊?
作者:
admin
时间:
2018-6-29 11:42
#include <iostream>
using namespace std;
int x,xx,xxx;
int a[10];
bool b,bb;
int i,j;
int A,B,C;
int main()
{
cin>>A>>B>>C;bb=true;
for (int q=1; q<=999; q++)
{
x=q*A;
xx=q*B;
xxx=q*C;
if (x>=100 && x<=999 && xx>=100 && xx<=999 && xxx>=100 && xxx<=999)
{
for (i=0; i<=9; i++) a[i]=1;
a[x/1%10]--;
a[x/10%10]--;
a[x/100%10]--;
a[xx/1%10]--;
a[xx/10%10]--;
a[xx/100%10]--;
a[xxx/1%10]--;
a[xxx/10%10]--;
a[xxx/100%10]--;
b=true;
for (i=1; i<=9; i++) if (a[i]!=0)b=false;
if (b) {bb=false;cout<<x<<' '<<xx<<' '<<xxx<<endl;}
}
}
if (bb)cout<<"No!!!";
return 0;
}
复制代码
作者:
universehyf
时间:
2018-7-8 15:24
#include<iostream>
#include<cmath>
using namespace std;
int a,b,c,x,xx,xxx,j,cc=0;
int d[10]={},e[9]={};
int main()
{
cin>>a>>b>>c;
int maxn=max(a,max(b,c)),minn=min(a,min(b,c));
for(int i=ceil(100.0/minn);i<=1000/maxn;i++)
{
bool pd=1;
for(j=1;j<=9;j++) d[j]=0;
x=i*a;
xx=i*b;
xxx=i*c;
e[0]=x/100;
e[1]=x%100/10;
e[2]=x%10;
e[3]=xx/100;
e[4]=xx%100/10;
e[5]=xx%10;
e[6]=xxx/100;
e[7]=xxx%100/10;
e[8]=xxx%10;
for(j=0;j<=8;j++)
d[e[j]]++;
for(j=1;j<=9;j++)
if(d[j]!=1) pd=0;
if(pd)
{
cc++;
if(x>xx) swap(x,xx);
if(x>xxx) swap(x,xxx);
if(xx>xxx) swap(xx,xxx);
cout<<x<<' '<<xx<<' '<<xxx<<endl;
}
}
if(!cc) cout<<"No!!!";
return 0;
}
复制代码
作者:
admin
时间:
2018-7-8 16:48
楼上那个画蛇添足的,题目里面说的很清晰 A<B<C呢
作者:
吴语林
时间:
2018-7-29 19:52
#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstdlib>
using namespace std;
int a,b,c,x,xx,xxx,w[10],t,y=0;
int main()
{
scanf("%d%d%d",&a,&b,&c);
for(int i=(123/a+min(123%a,1))*a;i<=333;i+=a)
{
// printf("\n%d\n",i);
int e=1;
memset(w,0,sizeof(w));w[0]=1;
x=i;xx=(i/a)*b;xxx=(i/a)*c;
if(xxx>=1000)
break;
for(int j=1;j<=3;j++)
{
t=x%10;x/=10;
// printf("%d ",t);
if(!w[t])
w[t]=1;
else
{
e=0;
break;
}
}
if(!e)
continue;
for(int j=1;j<=3;j++)
{
t=xx%10;xx/=10;
// printf("%d ",t);
if(!w[t])
w[t]=1;
else
{
e=0;
break;
}
}
if(!e)
continue;
for(int j=1;j<=3;j++)
{
t=xxx%10;xxx/=10;
// printf("%d ",t);
if(!w[t])
w[t]=1;
else
{
e=0;
break;
}
}
if(!e)
continue;
printf("%d %d %d\n",i,(i/a)*b,(i/a)*c),y=1;
}
if(!y)
printf("No!!!");
return 0;
}
复制代码
作者:
黄煦喆
时间:
2018-8-25 17:00
#include<bits/stdc++.h>
using namespace std;
int a,b,c,s;
int x,y,z,k[10],h[10];
bool flag,bb;
int main()
{
cin>>a>>b>>c;
for(int x=123;x<=987;x++)
{
memset(h,0,sizeof(h));
s=1;bb=true;
y=x/a*b;
z=x/a*c;
if(y>999||z>999)continue;
k[1]=x/100;
k[2]=x/10%10;
k[3]=x%10;
k[4]=y/100;
k[5]=y/10%10;
k[6]=y%10;
k[7]=z/100;
k[8]=z/10%10;
k[9]=z%10;
for(int i=1;i<=9;i++)h[k[i]]++;
for(int i=1;i<=9;i++)if(!h[i])bb=false;
if(x*b*c!=y*a*c||x*b*c!=z*a*b||y*a*c!=z*a*b)bb=false;
if(bb)
{flag=true;cout<<x<<' '<<y<<' '<<z<<endl;}
}
if(!flag)cout<<"No!!!";
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2