我们输入n个数字,程序必须输入其中正好有2个'9'的数字。 (例如,如果我们输入9193然后程序将输入它,但如果我们写73999或256它将不会给出任何输出)。 所以我写了这段代码
int main(){
int a, n, i, count=0, y;
cin>>n;
for(i=1; i<=n; i++){
cin>>a; y=a;
while(y>0){
if(y%10==9) count++;
y=y/10;
}
if(count==2) cout<<a<<endl;
}
return 0;
}
但我无法理解为什么这不起作用。 如果我改变它并以这种方式写它就可以了。
int main(){
int a, n, i, count, y;
cin>>n;
for(i=1; i<=n; i++){
count=0;
cin>>a; y=a;
while(y>0){
if(y%10==9) count++;
y=y/10;
}
if(count==2) cout<<a<<endl;
}
return 0;
}
如果你向我解释,我将非常感激。
答案 0 :(得分:1)
只需读取字符串(或将其转换为)并计数:
for(i=1; i<=n; i++){
std::string numstr;
std::cin >> numstr;
if( std::count( numstr.begin(), numstr.end(), '9' ) == 2 )
std::cout << numstr << std::endl;
}
答案 1 :(得分:1)
如果您不是每次都通过主循环将count
重置为0
,那么您需要将新号码中的计数添加到前一个号码的计数中。< / p>
因此,如果您为第一个号码输入19
,则会将count
设置为1
。然后,如果您为第二个号码键入939
,则会将count
设置为3
,并且测试if (count == 2)
将无法成功,即使该号码中有2个9 。在此之后,count
永远不会成为2
,因为您会继续添加-9 % 10
。
您需要从头开始计算每个数字。
请注意,您的算法不适用于负数。 -9
为9
,而不是SampleApp.mxml
。
答案 2 :(得分:-1)
我们需要为每个案例初始化count=0
。