很懵逼,为啥sum中途会发生改变

P1618 三连击(升级版)

月离 @ 2019-09-06 17:43:29

#include<iostream>
using namespace std;
int b[10];
int sum;
int a,w,c,d,e,f,g,h,i,x,y,z;
int main(){
    int A,B,C;
    cin>>A>>B>>C;
    for(int o=123;o<=987;o++){
        x=o;
        y=B/A*x;
        z=C/A*x;
        a=x/100;
        w=(x/10)%10;
        c=x%10;
        d=y/100;
        e=(y/10)%10;
        f=y%10;
        g=z/100;
        h=(z/10)%10;
        i=z%10;
        b[a]=1;
        b[w]=1;
        b[c]=1;
        b[d]=1;
        b[e]=1;
        b[f]=1;
        b[g]=1;
        b[h]=1;
        b[i]=1;

        if(b[1]*b[2]*b[3]*b[4]*b[5]*b[6]*b[7]*b[8]*b[9]==1){
            sum++;
            cout<<x<<" "<<y<<" "<<z<<endl;  
        }
        x=0;
        y=0;
        z=0;
        b[a]=0;
        b[w]=0;
        b[c]=0;
        b[d]=0;
        b[e]=0;
        b[f]=0;
        b[g]=0;
        b[h]=0;
        b[i]=0;
    }
    if(sum==0)cout<<"No!!!";
    return 0;
}

完全涉及到我的盲区了;

真的很是mb;

数据

1 3 5

会输出正解后多一个No;

在o==219的时候,sum突然从1变成了0;

???????????(真是服了)


by _FILARET_ @ 2019-09-06 17:54:50

orz


by MC方块人 @ 2019-09-06 18:12:57

@月离 你把你三连击的程序改一下不就完事了


by 月离 @ 2019-09-06 18:13:07

@deadpool123 dalaodalao帮我看看啊啊啊啊


by 月离 @ 2019-09-06 18:15:44

@MC方块人 所以呢,我还能怎么改


by typeryougishiki @ 2019-09-06 18:19:09

o==200时

z = 5/1*200 = 1000

g = 1000/100 = 10

于是b[g]越界了


by 月离 @ 2019-09-06 18:22:47

@typeryougishiki 感谢大佬

好像没有问题了

但还是不明白为什么b[g]的越界为什么会影响到sum


by typeryougishiki @ 2019-09-06 18:23:45

大概是因为b数组和sum在内存中是相邻的吧(趴)


by 月离 @ 2019-09-06 18:26:26

@typeryougishiki

服了,最后一个点还是wa,大佬能帮我下这个点的数据吗,今天到了上线了


by 月离 @ 2019-09-06 18:27:12

其实我再写一份代码说不定就A了


by _FILARET_ @ 2019-09-06 18:41:33

@月离 再写一份代码真实


| 下一页