【问题标题】:Making change using Objective-C使用 Objective-C 进行更改
【发布时间】:2011-04-23 23:40:11
【问题描述】:

我最近刚开始学习 Objective-C(或相关的编程),并被困在一个简单的程序上。

我试图创造硬币、硬币、镍币和便士的变化,但注意到我想出的解决方案会给镍币或便士随机赋予价值。

例如。 25 的零钱会变成“零钱,零钱,-1881139893 镍币和 4096 便士”

Ex2。 30 的零钱会变成“零钱是 1 美分硬币、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);

【问题讨论】:

  • pennies,顺便说一句。不是pennis。 =)

标签: objective-c coin-change


【解决方案1】:

你没有初始化你的变量开始,所以它们都以随机值开始,然后在你的代码中,在没有一分钱的情况下,你永远不会将 p 设置为任何东西,所以它保留了它的初始随机值,然后您会在输出中看到。您可以通过在开始时初始化变量来修复它。

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

【讨论】:

  • 我明白了,我确实意识到将它的初始值设置为 0 有助于解决问题,但是,即使我没有设置初始值,DIME 似乎总是为 0?将来一定要牢记这一点。谢谢。
  • @Hyung:这不是随机的,它是之前在那个内存位置的东西。如果您调用一个函数,该函数仅将许多局部变量初始化为(例如)42,然后返回,并且直接在返回时调用您的更改函数,您可能会看到 42硬币的数量。
  • @Hyung Suh:正如 Aidan 所说,这不是随机的,但也不可靠。它只是可能在大多数计算机上以这种方式工作。仅供参考。
【解决方案2】:

您应该改用模数。我不想破坏您的学习体验,因此这是一个示例,说明如何使用模数计算仅以秒为单位的时间的天、小时、分钟和秒。

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

现在将其应用于您的问题:)

【讨论】:

  • 会尝试一下。感谢您的建议!确实有助于获得这样的指针。 :)
猜你喜欢
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
相关资源
最近更新 更多