洛谷1008 三连击
本题地址:
题目描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。
输入输出格式
输入格式:
木有输入
输出格式:
若干行,每行3个数字。按照每行第一个数字升序排列。
输入输出样例
输入样例#1:
输出样例#1:
192 384 576* * *...* * *(输出被和谐了) 题解:注意没有零,别跟"除法"那道题搞混了
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define PAU putchar(' ') 9 #define ENT putchar('\n')10 #define MSE(a,b) memset(a,b,sizeof(a))11 #define REN(x) for(ted*e=fch[x];e;e=e->nxt)12 #define TIL(x) for(int i=1;i<=x;i++)13 #define ALL(x) for(int j=1;j<=x;j++)14 using namespace std;15 inline int read(){16 int x=0;bool sig=true;char ch=getchar();17 for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=false;18 for(;isdigit(ch);ch=getchar())x=10*x+ch-'0';return sig?x:-x;19 }20 inline void write(int x){21 if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;22 int len=0;static int buf[20];while(x)buf[len++]=x%10,x/=10;23 for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;24 }25 bool vis[10];char s[5];26 bool check(int i){27 MSE(vis,false);28 sprintf(s,"%d",i);ALL(3)if(s[j-1]=='\0')return false;else vis[s[j-1]-'0']=true;29 sprintf(s,"%d",i/2);ALL(3)if(s[j-1]=='\0')return false;else vis[s[j-1]-'0']=true;30 sprintf(s,"%d",i/2*3);ALL(3)if(s[j-1]=='\0')return false;else vis[s[j-1]-'0']=true;31 ALL(9)if(!vis[j])return false;return true;32 }33 int main(){34 TIL(999)if(!(i&1)&&check(i))printf("%d %d %d\n",i>>1,i,i/2*3);35 return 0;36 }