今天看到好几个网友发了一道百度面试题,好奇看了下。对于ACMer来说应该算是水题一道吧,也许出于我对算法的敬畏,呵呵
依序遍历0到100闭区间内所有的正整数,如果该数字能被3整除,则输出该数字及‘*’标记;如果该数字能被5整除,则输出该数字及‘#’标记;如果该数字既能被3整除又能被5整除,则输出该数字及‘*#’标记。
于此,个人提点拙劣的想法
第一思路是:
void myAnswer(){
for(int i=0;i<=100;i++){
if(i%3==0){
if(i%5==0)cout<<i<<"*#";
else cout<<i<<"*";
}
else if(i%5==0) cout<<i<<"#";
}
}
后来想了一下,感觉很熟悉
int n=100,m3=1,m5=1,p=1;
while(p<=100){
if(m3*3<m5*5){
m3++;
p=m3*3;
cout<<p<<"*";
}
else if(m3*3>m5*5){
m5++;
p=m5*5;
cout<<p<<"#";
}
else{
m3++;
m5++;
p=m3*3;
cout<<p<<"*#";
}
}