华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1258|回复: 8
打印 上一主题 下一主题

P1618 三连击(升级版)

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2018-5-13 13:51:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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

回复

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
沙发
发表于 2018-6-27 10:05:03 | 只看该作者
闻子安

  1. #include<iostream>
  2. using namespace std;
  3. int m,flag,q=0,i,j,k,a[10];
  4. float b,c,d;
  5. int main()
  6. {
  7.     cin>>b>>c>>d;
  8.     for(i=123; i<=329; i++)
  9.     {
  10.         flag=1;for(m=1; m<=9; m++)a[m]=0;
  11.         j=i*c/b;
  12.         k=i*d/b;
  13.         a[i/100%10]=i/100%10;
  14.         a[i/10%10]=i/10%10;
  15.         a[i/1%10]=i/1%10;
  16.         a[j/100%10]=j/100%10;
  17.         a[j/10%10]=j/10%10;
  18.         a[j/1%10]=j/1%10;
  19.         a[k/100%10]=k/100%10;
  20.         a[k/10%10]=k/10%10;
  21.         a[k/1%10]=k/1%10;
  22.         for(m=1; m<=9; m++)
  23.             if(a[m]==0)flag=0;
  24.         if(flag)
  25.             {q=1;cout<<i<<" "<<j<<" "<<k<<endl;}
  26.     }
  27.     if(q==0)cout<<"No!!!";
  28.     return 0;
  29. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
板凳
 楼主| 发表于 2018-6-27 11:32:45 来自手机 | 只看该作者
若是加强版 比例为 ABC的话 此题有问题
回复 支持 反对

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
地板
发表于 2018-6-28 08:45:29 | 只看该作者
但是我AC了啊?
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
5#
 楼主| 发表于 2018-6-29 11:42:27 | 只看该作者
  1. #include <iostream>
  2. using namespace std;
  3. int x,xx,xxx;
  4. int a[10];
  5. bool b,bb;
  6. int i,j;
  7. int A,B,C;
  8. int main()
  9. {
  10.     cin>>A>>B>>C;bb=true;
  11.     for (int q=1; q<=999; q++)
  12.     {
  13.         x=q*A;
  14.         xx=q*B;
  15.         xxx=q*C;
  16.         if (x>=100 && x<=999  && xx>=100 && xx<=999 && xxx>=100 &&  xxx<=999)
  17.         {
  18.             for (i=0; i<=9; i++) a[i]=1;
  19.             a[x/1%10]--;
  20.             a[x/10%10]--;
  21.             a[x/100%10]--;
  22.             a[xx/1%10]--;
  23.             a[xx/10%10]--;
  24.             a[xx/100%10]--;
  25.             a[xxx/1%10]--;
  26.             a[xxx/10%10]--;
  27.             a[xxx/100%10]--;
  28.             b=true;
  29.             for (i=1; i<=9; i++) if (a[i]!=0)b=false;
  30.             if (b) {bb=false;cout<<x<<' '<<xx<<' '<<xxx<<endl;}

  31.         }
  32.     }
  33.     if (bb)cout<<"No!!!";
  34.     return 0;
  35. }
复制代码
回复 支持 反对

使用道具 举报

14

主题

106

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
6#
发表于 2018-7-8 15:24:10 | 只看该作者
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int a,b,c,x,xx,xxx,j,cc=0;
  5. int d[10]={},e[9]={};
  6. int main()
  7. {
  8.     cin>>a>>b>>c;
  9.     int maxn=max(a,max(b,c)),minn=min(a,min(b,c));
  10.     for(int i=ceil(100.0/minn);i<=1000/maxn;i++)
  11.     {
  12.         bool pd=1;
  13.         for(j=1;j<=9;j++) d[j]=0;
  14.         x=i*a;
  15.         xx=i*b;
  16.         xxx=i*c;
  17.         e[0]=x/100;
  18.         e[1]=x%100/10;
  19.         e[2]=x%10;
  20.         e[3]=xx/100;
  21.         e[4]=xx%100/10;
  22.         e[5]=xx%10;
  23.         e[6]=xxx/100;
  24.         e[7]=xxx%100/10;
  25.         e[8]=xxx%10;
  26.         for(j=0;j<=8;j++)
  27.             d[e[j]]++;
  28.         for(j=1;j<=9;j++)
  29.             if(d[j]!=1) pd=0;
  30.         if(pd)
  31.         {
  32.             cc++;
  33.             if(x>xx) swap(x,xx);
  34.             if(x>xxx) swap(x,xxx);
  35.             if(xx>xxx) swap(xx,xxx);
  36.             cout<<x<<' '<<xx<<' '<<xxx<<endl;
  37.         }
  38.     }
  39.     if(!cc) cout<<"No!!!";
  40.     return 0;
  41. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
7#
 楼主| 发表于 2018-7-8 16:48:21 | 只看该作者
楼上那个画蛇添足的,题目里面说的很清晰 A<B<C呢
回复 支持 反对

使用道具 举报

2

主题

105

帖子

306

积分

中级会员

Rank: 3Rank: 3

积分
306
8#
发表于 2018-7-29 19:52:48 | 只看该作者
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <map>
  6. #include <string>
  7. #include <vector>
  8. #include <queue>
  9. #include <stack>
  10. #include <cstdio>
  11. #include <cstdlib>
  12. using namespace std;
  13. int a,b,c,x,xx,xxx,w[10],t,y=0;
  14. int main()
  15. {
  16.     scanf("%d%d%d",&a,&b,&c);
  17.     for(int i=(123/a+min(123%a,1))*a;i<=333;i+=a)
  18.     {
  19. //            printf("\n%d\n",i);
  20.             int e=1;
  21.             memset(w,0,sizeof(w));w[0]=1;
  22.             x=i;xx=(i/a)*b;xxx=(i/a)*c;
  23.             if(xxx>=1000)
  24.                     break;
  25.             for(int j=1;j<=3;j++)
  26.             {
  27.                     t=x%10;x/=10;
  28. //                    printf("%d ",t);
  29.                     if(!w[t])
  30.                             w[t]=1;
  31.                     else
  32.                     {
  33.                             e=0;
  34.                                 break;
  35.                     }
  36.             }
  37.             if(!e)
  38.                     continue;
  39.             for(int j=1;j<=3;j++)
  40.             {
  41.                     t=xx%10;xx/=10;
  42. //                    printf("%d ",t);
  43.                     if(!w[t])
  44.                             w[t]=1;
  45.                     else
  46.                     {
  47.                             e=0;
  48.                                 break;
  49.                     }
  50.             }
  51.             if(!e)
  52.                     continue;
  53.             for(int j=1;j<=3;j++)
  54.             {
  55.                     t=xxx%10;xxx/=10;
  56. //                    printf("%d ",t);
  57.                     if(!w[t])
  58.                             w[t]=1;
  59.                     else
  60.                     {
  61.                             e=0;
  62.                                 break;
  63.                     }
  64.             }
  65.             if(!e)
  66.                     continue;
  67.             printf("%d %d %d\n",i,(i/a)*b,(i/a)*c),y=1;
  68.     }
  69.     if(!y)
  70.             printf("No!!!");
  71.     return 0;
  72. }
复制代码
回复 支持 反对

使用道具 举报

9

主题

158

帖子

470

积分

华一学生

积分
470
QQ
9#
发表于 2018-8-25 17:00:58 | 只看该作者
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a,b,c,s;
  4. int x,y,z,k[10],h[10];
  5. bool flag,bb;
  6. int main()
  7. {
  8.     cin>>a>>b>>c;
  9.     for(int x=123;x<=987;x++)
  10.     {
  11.         memset(h,0,sizeof(h));
  12.         s=1;bb=true;
  13.         y=x/a*b;
  14.         z=x/a*c;
  15.         if(y>999||z>999)continue;
  16.         k[1]=x/100;
  17.         k[2]=x/10%10;
  18.         k[3]=x%10;
  19.         k[4]=y/100;
  20.         k[5]=y/10%10;
  21.         k[6]=y%10;
  22.         k[7]=z/100;
  23.         k[8]=z/10%10;
  24.         k[9]=z%10;
  25.         for(int i=1;i<=9;i++)h[k[i]]++;
  26.         for(int i=1;i<=9;i++)if(!h[i])bb=false;
  27.         if(x*b*c!=y*a*c||x*b*c!=z*a*b||y*a*c!=z*a*b)bb=false;
  28.         if(bb)
  29.             {flag=true;cout<<x<<' '<<y<<' '<<z<<endl;}
  30.     }
  31.     if(!flag)cout<<"No!!!";
  32.     return 0;
  33. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-27 05:37 , Processed in 0.151648 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表