daonan @ 2022-02-04 23:59:40
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x,y,z;
int ass=0;
cin>>x>>y>>z;
for(int a=1;a<=9;a++)
{
for(int b=1;b<=9&&b!=a;b++)
{
for(int c=1;c<=9&&c!=a&&c!=b;c++)
{
for(int d=1;d<=9&&d!=a&&d!=b&&d!=c;d++)
{
for(int e=1;e<=9&&e!=a&&e!=b&&e!=c&&e!=d;e++)
{
for(int f=1;f<=9&&f!=a&&f!=b&&f!=c&&f!=d&&f!=e;f++)
{
for(int g=1;g<=9&&g!=a&&g!=b&&g!=c&&g!=d&&g!=e&&g!=f;g++)
{
for(int h=1;h<=9&&h!=a&&h!=b&&h!=c&&h!=d&&h!=e&&h!=f&&h!=g;h++)
{
for(int i=1;i<=9&&i!=a&&i!=b&&i!=c&&i!=d&&i!=e&&i!=f&&i!=g&&i!=h;i++)
{
int t=a*100+b*10+c;
int j=d*100+e*10+f;
int k=g*100+h*10+i;
if((double)(t/j)==(double)(x/y)&&(double)(j/k)==(double)(y/z))
{
cout<<a<<b<<c<<' '<<d<<e<<f<<' '<<g<<h<<i<<endl;
ass++;
}
}
}
}
}
}
}
}
}
}
if(ass==0)
cout<<"No!!!";
return 0;
}
by L_cm_C5H6 @ 2022-02-05 00:21:48
用内部if判断吧...你这样不是进一个循环直接被后面的不等于语句跳出去了么
by coldy_rainy @ 2022-02-05 00:46:20
@daonan
相似算法参考:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c,a1,a2,a3,a4,a5,a6,a7,a8,a9,yi,er,san;
bool flag=false;
cin>>a>>b>>c;
for(a1=1;a1<=9;a1++)
{
for(a2=1;a2<=9;a2++)
{
if(a2==a1)continue;
for(a3=1;a3<=9;a3++)
{
if(a3==a1||a3==a2)continue;
for(a4=1;a4<=9;a4++)
{
if(a4==a3||a4==a2||a4==a1)continue;
for(a5=1;a5<=9;a5++)
{
if(a5==a4||a5==a3||a5==a2||a5==a1)continue;
for(a6=1;a6<=9;a6++)
{
if(a6==a5||a6==a4||a6==a3||a6==a2||a6==a1)continue;
for(a7=1;a7<=9;a7++)
{
if(a7==a6||a7==a5||a7==a4||a7==a3||a7==a2||a7==a1)continue;
for(a8=1;a8<=9;a8++)
{
if(a8==a7||a8==a6||a8==a5||a8==a4||a8==a3||a8==a2||a8==a1)continue;
for(a9=1;a9<=9;a9++)
{
if(a9==a8||a9==a7||a9==a6||a9==a5||a9==a4||a9==a3||a9==a2||a9==a1)continue;
yi=a1*100+a2*10+a3;
er=a4*100+a5*10+a6;
san=a7*100+a8*10+a9;
if(yi*1.0/er==a*1.0/b&&yi*1.0/san==a*1.0/c&&er*1.0/san==b*1.0/c)
{
cout<<yi<<" "<<er<<" "<<san<<endl;
flag=true;
}
}
}
}
}
}
}
}
}
}
if(flag==false)cout<<"No!!!"<<endl;
return 0;
}
by daonan @ 2022-02-05 16:54:09
@penhaochen 好的,明白了,谢谢dalao!
by daonan @ 2022-02-05 16:56:02
@L_cm_C5H6 qwq就是遍历后只选取九个数字都不一样的状况呀,本蒟蒻感觉好像问题不大?
by L_cm_C5H6 @ 2022-02-05 17:42:01
@daonan 你把条件写到for判断那里的话不是相当于一旦a==b之后就a+=1了么 大概只能枚举a>b>c>d>e...这样吧
你的程序大概是这样运行的?
第一层循环a=1:
第二层循环b=1: {...}
满足a==b直接退出二层循环回到第一层
a++
a = 2
...
调试看看应该更清楚点
by daonan @ 2022-02-05 19:01:47
@L_cm_C5H6 哦哦我明白了,确实是这样的,谢谢大佬!
by fyder_anran @ 2022-02-05 22:23:11
@daonan
我来解释一下:
就拿这一段代码来说:
for(int i=1;i<=9&&i!=a&&i!=b&&i!=c&&i!=d&&i!=e&&i!=f&&i!=g&&i!=h;i++)
这里的判断是跳出循环的判断
我们要完成的是 错误 代码要完成的
所以所有的特判都应该放在循环里面
所以,试着用字符
by fyder_anran @ 2022-02-05 22:27:41
@daonan 这个题目优化算法可以延伸到:P2359,难度 不太大 但是调试要 调一天 ,试着理解一下(我不李姐)
by daonan @ 2022-02-05 23:51:32
@shaoziqi qwq我还没(bu)做(hui)过(zuo)绿题,还在黄橙题扑腾