萌新求助,80代码wa了最后一个点

P1618 三连击(升级版)

Mang @ 2019-07-18 18:50:39

include<stdio.h>

int main() { int A,B,C,b,c,m,n=0; double x; scanf("%d%d%d",&A,&B,&C); for(int i=123;i<=987;i++) {
x=i%A; b=xB; c=xC; if((i/100)(i%100/10)(i%10)(b/100)(b%100/10)(b%10)(c/100)(c%100/10)(c%10)==362880) { m= i/100+i%100/10+i%10+b/100+b%100/10+b%10+c/100+c%100/10+c%10; if(m==45) { printf("%d %d %d\n",i,b,c); n++; } }
} if(n==0) printf("No!!!"); return 0; }


by Mang @ 2019-07-18 18:55:16

其实就是不明白,定义一个浮点型的x记录输出的第一个数字除以A的值,例如132/123=1.07317073.... 为什么最后一个点会wa 然后输出 132 456 789 213 456 789 。。。。 这类错误数据


by Mang @ 2019-07-18 18:58:20

我的思路还是很简单的,就是穷举123到987,然后先乘出对应的比例关系,判断每一位是否为123456789,用了一个乘积,和和来判断。但,不明白,当输入为123 456 789的时候要怎么解决


by 冥诺在线发呆 @ 2019-07-18 19:06:05

希望更丰富的展现?使用Markdown


by 失笑喷饭满案 @ 2019-07-19 18:55:57

我也是最后一个出了问题,我前面都是用的整型判断的,为了最后一个添加了一个浮点的判断。

if((float)one/propA==(float)two/propB&&(float)three/propC==(float)two/propB){}

完整代码如下:

#include <iostream>
using namespace std;

bool check(int i,int j,int k){
    bool flag[10]={false}; 
    int index=100;
    for(index=100;index>=1;index/=10){
        flag[i/index]=true;
        i-=index*(i/index);
        flag[j/index]=true;
        j-=index*(j/index);
        flag[k/index]=true;
        k-=index*(k/index);
    }
    for(int i=1;i<10;i++){
        if(!flag[i])return false;
    }
    return true;
}
int main(){
    int one,two,three;
    int propA,propB,propC;

    cin>>propA>>propB>>propC;

    bool flag=false;
    for(int i=123;i<=987;i++){
        one=i;
        two=(i/propA)*propB;
        three=(i/propA)*propC;
        if(two<=987&&three<=987&&check(one,two,three)&&(float)one/propA==(float)two/propB&&(float)three/propC==(float)two/propB){
            flag=true;
            cout<<one<<" "<<two<<" "<<three<<endl;
        }
    }
    if(!flag){
        cout<<"No!!!";
    }

    return 0;
} 

by 闲鱼 @ 2019-08-01 17:08:31

用double强制转换


|