#include<bits/stdc++.h>
using namespace std;
#define for(i,a,n) for(int i=a;i<n;i++)
int main()
{
int a,b,c;
cin>>a>>b>>c;
int no_exist=1;//范围内是否存在这样的成比例三位数
for(i,123,988)
{
int m=1.0ib/a+0.5;//加0.5是保证不会出错
int n=1.0ic/a+0.5;
if(m>=988||n>988)
continue;
int arr[10]={0};
arr[i/100]=1;
arr[(i%100)/10]=1;
arr[(i%10)]=1;
arr[m/100]=1;
arr[(m%100)/10]=1;
arr[(m%10)]=1;
arr[n/100]=1;
arr[(n%100)/10]=1;
arr[(n%10)]=1;
int index=0;
for(j,1,10)
{
if(arr[j]==1)
index++;
}
if(index==9){
cout<<i<<" "<<m<<" "<<n<<endl;
no_exist=0;
}
}
if(no_exist)
cout<<"NO!!!"<<endl;
return 0;
}
麻烦了 麻烦给我细细讲讲我这个做法哪里有问题 为什么不能满分通过
然后我想知道 double 和int 之间转换有什么需要注意的点
以及this question你们有什么更便捷的方法吗 可以给我代码(带注释的让我自己品)谢谢了
麻烦了 祝大家身体健康天天快乐。
中间有一处int类型的数+0.5会自动舍掉小数点,也就相当于没有加
给个代码(有注释):
😀有用请采纳~~~
//LG1618 22-04-28
#include <bits/stdc++.h>
using namespace std;
bool FindSame(int aa,int bb,int cc)//检查重复
{
int t[10];
memset(t,0,sizeof(t));//初始化0
while (aa>0)
{
t[aa%10]++;aa/=10;
}
while (bb>0)
{
t[bb%10]++;bb/=10;
}
while (cc>0)
{
t[cc%10]++;cc/=10;
}
for (int i=1;i<=9;i++) if (t[i]!=1) return 0;//不等于1就说明重复或没有
return 1;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int x,y,z;//对应a,b,c
cin>>x>>y>>z;
if ((x+y+z)%3!=0)
{
//如果x,y,z加起来都不是3的倍数,说明x,y,z不可能是整数
//因为这三个数的和必然是3的倍数
cout<<"No!!!"<<endl;exit(0);//直接退出
}
bool f=0;//记录是否输出
for (int i=123;i<=987;i++)//枚举
{
int a=i,b,c;
if (a%x==0) //算另外两数
{
b=a/x*y;
if (b%y==0) c=b/y*z;
if (b>999 || c>999) continue;
if (FindSame(a,b,c))
{
cout<<a<<" "<<b<<" "<<c<<endl;f=1;
}
}
}
if (!f) cout<<"No!!!"<<endl;
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!