Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Objective-C进行更改_Objective C_Coin Change - Fatal编程技术网

使用Objective-C进行更改

使用Objective-C进行更改,objective-c,coin-change,Objective C,Coin Change,我最近刚开始学习Objective-C或编程,我被困在一个简单的程序中 我试图用硬币、一角硬币、五分镍币和一分钱来创造变化,但我注意到我提出的解决方案会给五分镍币或一分钱带来随机值 前。 25英镑的零钱是1个25美分,0个一角硬币,-1881139893个五分镍币和4096便士 例2。 30美元的零钱是1个25美分,0个一角硬币,1个五分镍币和4096便士 我可以添加/更改什么来修复此行为 另外,有没有比运行4个不同的if语句更好的解决方案 谢谢 下面是我的代码: int orig, q, d,

我最近刚开始学习Objective-C或编程,我被困在一个简单的程序中

我试图用硬币、一角硬币、五分镍币和一分钱来创造变化,但我注意到我提出的解决方案会给五分镍币或一分钱带来随机值

前。 25英镑的零钱是1个25美分,0个一角硬币,-1881139893个五分镍币和4096便士

例2。 30美元的零钱是1个25美分,0个一角硬币,1个五分镍币和4096便士

我可以添加/更改什么来修复此行为

另外,有没有比运行4个不同的if语句更好的解决方案

谢谢

下面是我的代码:

int orig, q, d, n, p;

NSLog(@"Give money to make change");
scanf("%i", &orig);

if(orig >= 25) {
    q = orig/25;
    orig -=  q*25;
}
if(orig >= 10 && orig < 25) {
    d = orig/10;
    orig -= d*10;
}
if(orig >= 5 && orig < 10) {
    n = orig/5;
    orig -= n*5;
}
if(orig >= 1 && orig < 5) {
    p = orig;
}

NSLog(@"The change is %i quarter, %i dime, %i nickels, and %i pennis", q, d, n, p);

你应该使用模数来代替。我不想破坏你的学习经验,所以这是一个例子,你可以使用模数来计算只以秒为单位的时间的天、小时、分和秒

int x = 1123123; 
int seconds = x % 60;
x /= 60;
int minutes = x % 60;
x /= 60;
int hours = x % 24;
x /= 24;
int days = x;

现在把它应用到你的问题上:

你应该使用模来代替。我不想破坏你的学习经验,所以这是一个例子,你可以使用模数来计算只以秒为单位的时间的天、小时、分和秒

int x = 1123123; 
int seconds = x % 60;
x /= 60;
int minutes = x % 60;
x /= 60;
int hours = x % 24;
x /= 24;
int days = x;

现在把它应用到你的问题上:

你没有初始化你的变量,所以它们都是从随机值开始的,然后在你的代码中,在没有便士的情况下,你从来没有将p设置为任何值,所以它保留了它的初始随机值,你可以在输出中看到。您可以通过在开始时初始化变量来修复它

int orig=0, q=0, d=0, n=0, p=0;

你不需要初始化你的变量,所以它们都是从随机值开始的,然后在你的代码中,在没有便士的情况下,你从来没有将p设置为任何值,所以它保留了它的初始随机值,你可以在输出中看到。您可以通过在开始时初始化变量来修复它

int orig=0, q=0, d=0, n=0, p=0;

我明白了,我确实意识到将其初始值设置为0有助于解决问题,然而,即使我没有设置初始值,DIME似乎也总是0?我们将确保在将来牢记这一点。谢谢。@Hyung:这不是随机的,它是以前在那个记忆位置的东西。如果你调用一个函数,它只是初始化了很多局部变量,比如42,然后返回,然后直接在返回时调用你的更改生成函数,你可能会看到42表示你的硬币数。@Hyung-Suh:正如Aidan所说,它不是随机的,但也不可靠。它很可能在大多数计算机上都是这样工作的。仅供参考。我明白了,我确实意识到将其初始值设置为0有助于解决问题,但是,即使我没有设置初始值,DIME似乎也始终为0?我们将确保在将来牢记这一点。谢谢。@Hyung:这不是随机的,它是以前在那个记忆位置的东西。如果你调用一个函数,它只是初始化了很多局部变量,比如42,然后返回,然后直接在返回时调用你的更改生成函数,你可能会看到42表示你的硬币数。@Hyung-Suh:正如Aidan所说,它不是随机的,但也不可靠。它很可能在大多数计算机上都是这样工作的。仅供参考。我会试试的。谢谢你的建议!得到这样的指针真的很有帮助我会试试的。谢谢你的建议!得到这样的指针真的很有帮助顺便说一下,几便士。不是彭尼斯=顺便说一下,几便士。不是彭尼斯=