有大佬能看一下吗,为什么都输出No!?孩子已经卡了两个小时了

P1618 三连击(升级版)

山迟暮 @ 2021-07-22 13:48:13

#include<bits/stdc++.h>
using namespace std;
int r[10],love[1001];

bool ke(int u,int i,int o){
    int f=0,e=1,p=0;
    while(u) {r[p++] = u%10; u/=10;};
    while(i) {r[p++] = i%10; i/=10;};
    while(o) {r[p++] = o%10; o/=10;};
    for(int i = 1;i<=p;i++) {f+=r[i];e*=r[i];}
    if(f==45&&e==362880) return true;
    return false;
}

int main(){
    bool flag = true;
    int a,b,c,x=0,len=0;
    cin>>a>>b>>c;

    for(int i=1;i<=9;i++){
        for(int j=1;j<=9;j++){
            for(int z=1;z<=9;z++){
                love[len++] = i*100+j*10+z;
            }
        }
    }

    for(int i=1;i<=len;i++){
        for(int j=i+1;j<=len;j++){
            for(int z=j+1;z<=len;z++){
                if(((love[i]*b==love[j]*a)&&(love[j]*c==love[z]*b))&&(ke(love[i],love[j],love[z])==true)){
                    cout<<love[i]<<" "<<love[j]<<" "<<love[z]<<endl;
                    flag = false;
                }
            }
        }
    }
    if(flag==true) cout<<"No!!!";
    return 0;
} 

by Rui_R @ 2021-07-22 15:07:14

@zhou1108__ 把 [p++] 改成 [++p]

[len++] 同理


by 山迟暮 @ 2021-07-22 16:39:40

@Rui_R 没用诶


by Rui_R @ 2021-07-22 19:32:19

@zhou1108__ ,,我改完交上去过了

你仔细看看是不是哪没改干净


by 山迟暮 @ 2021-07-22 19:45:01

@Rui_R !!!谢谢,不过为什么要用++len


by Rui_R @ 2021-07-22 19:49:20

@zhou1108__

p++ 是返回 p 的值,然后把 p+=1

++p 是把 p+=1,然后返回 p 的值

你这里枚举的时候是从 1 枚举到 p ,并且 p 初始值是 0

那么你感受一下就是 ++p


by 山迟暮 @ 2021-07-23 08:24:16

@Rui_R !!如果p初始是1就可以用p++了是吗。 谢谢大佬


by Rui_R @ 2021-07-23 08:42:09

@zhou1108__ 可以,但是要注意有意义的下标范围会变成 1p-1


by 山迟暮 @ 2021-07-23 10:14:48

@Rui_R 好哒


|