gpt4 book ai didi

java - 尝试编写返回某些数字的数学测试时出现问题

转载 作者:行者123 更新时间:2023-12-02 02:22:55 25 4
gpt4 key购买 nike

我的问题看起来很简单,但我对编程还比较陌生,我无法弄清楚我的代码出了什么问题。

我应该返回 n(最大 1000000)以下同时包含 7 和 9 的数字的数量。例如,n=10 返回 0,n=100 返回 2(从 79 到 97)等。

int allWith7Or9(int n) 
{
int count = 0;
for(int i = 0; i < n; i++)
{
if(i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7)
{
if(i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9)
{
count++;
}
}
}
return count;
}

我意识到我可以使用 &&,并且我尝试过,但我的代码总是出现 0,我不知道为什么。我至少用 3 种不同的方式实现了这一点。

这是我尝试过的另一种实现:

int allWith7Or9(int n) 
{
int count = 0;
for(int i = 0; i < n; i++)
{
if((i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7
|| i%1000000==7) && (i%10==9 || i%100==9 || i%1000==9
|| i%10000==9 || i%100000==9 || i%1000000==9))
{
count++;
}
}
return count;
}

谢谢!

最佳答案

if(i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7)
{
if(i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9)
{
count++;
}
}

基本上是

if(cond1)
{
if(cond2)
{
count++;
}
}

基本上是:

if(cond1 && cond2)
{
count++;
}

因为两个条件都必须满足才能增加 count

这些条件并不同时成立,因为

i % 100 == 7

可能不是你的意思。这不是检查 70、71 等数字,而是检查除以 100 余数为 7 的数字,例如 7、107、207。所以

i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7

仅当i == 7时匹配,并且

i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9

仅在i == 9时匹配。 7 != 9,因此计数器不会增加。

<小时/>

您可以将条件重写为:

i%10==7 || (i/10)%10==7 || (i/100)%10==7 etc

但是像这样全部写出来是困惑且容易出错的。

相反,使用循环:

boolean found7 = false;
boolean found9 = false;
for (int ii = i; ii > 0: ii /= 10) {
switch (ii % 10) {
case 7: found7 = true; break;
case 9: found9 = true; break;
}
}

if (found7 && found9) {
count++;
}

这使用两个标志来指示您找到了哪些数字。检查最后一个数字,看看它是 7 还是 9,然后除以 10 以丢弃该数字并继续下一个数字。

关于java - 尝试编写返回某些数字的数学测试时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48236017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com