P1618 三连击(升级版)

题目描述

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

//感谢黄小U饮品完善题意

输入格式

三个数,A,B,C

输出格式

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

输入输出样例

输入 #1
2009
输出 #1
3 3 2003

#include<bits/stdc++.h>
using namespace std;
int a,b,c,f[4],h[10],i,j,k,l,n,p=3,q=2,u=3,x[7],w,uu=0,yy=0,kk,ll;
double g[4],m[4];
int main(){

cin>>a>>b>>c;
double d=1000/(a+c)*c;
  if(d<123)
  cout<<"No!!!";
  for(i=1;i<=3;i++)
  {
      h[1]=h[2]=h[3]=h[4]=h[5]=h[6]=h[7]=h[8]=h[9]=0;
      h[i]=1;
      f[1]=i;
      for(j=1;j<=9;j++)
      {
          
          for(ll=1;ll<=9;ll++)
      {
          if(ll==i) continue;
          else h[ll]=0;
      }
      if(h[j]==1)
          continue;
          h[j]=1;
          f[2]=j;
          
          for(k=1;k<=9;k++)
      {
          for( kk=1;kk<=9;kk++)
          {
              if(kk==i||kk==j)
              continue;
              else 
              h[kk]=0;
          }
          uu=0;
          if(h[k]==1)
          continue;
          f[3]=k;
          h[k]=1;
          double n=f[1]*100+f[2]*10+f[3];
          double o=n/a*b,r=n/a*c;
          if(o!=int(o)||r!=int(r)||r>999||o>999)
          continue;
          x[1]=int(o)%10;
          x[2]=int(o)/10%10;
          x[3]=int(o)/100%10;
          x[4]=int(r)%10;
          x[5]=int(r)/10%10;
          x[6]=int(r)/100%10;
          for(w=1;w<=6;w++)
          {
              if(h[x[w]]==1)
              {uu=1;
              break;
              }
              else h[x[w]]=1;
          }
          if(uu==0)
          {
              yy=1;
              cout<<f[1]<<f[2]<<f[3]<<" "<<int(o)<<" "<<int(r)<<endl;
          }

      }
      
      }
  }
  if(yy==0)
  cout<<"No!!!";

}
原文地址:https://www.cnblogs.com/lau1997/p/12534526.html