我無法解決這個問題,幾天來我一直在努力解決這個問題。以下是問題的全文:
撰寫一個函式,對于給定的非負 int
n,將 的出現次數9作為數字回傳,但其左側緊鄰9另一個的 a 計數加倍,因此產生 4。99912349
問題有兩個部分,a) 和 b)。
a) 部分要求使用遞回解決此問題,并且
b) 部分需要迭代。
我主要在遞回問題上遇到麻煩。這是我的 a) 部分代碼:
#include <stdio.h>
#include <stdlib.h>
/* Write a function that for a given a non-negative int n, computes the count of the
occurrences of 9 as a digit, except
that an 9 with another 9 immediately to its left counts double, so 9914329 yields 4. */
int recursiveNines(int mynumber) {
int counter = 0;
if (mynumber = 0) {
return 0;
}
if (mynumber / 10 == 9) {
counter ;
}
else if (mynumber / 10 == 9 && mynumber / 100 == 9) {
counter = 2;
}
return mynumber recursiveNines(mynumber / 10);
}
我認為該功能還可以,但我不確定如何回傳最終計數器并因此測驗我的功能。
這是我迭代這個問題的代碼:
int iterateNines(int mynumber) {
int counter = 0;
do {
if (mynumber / 10 == 9) {
counter ;
}
else if (mynumber / 10 == 9 && mynumber / 100 == 9) {
counter =2;
}
} while (mynumber != 0);
return counter;
}
uj5u.com熱心網友回復:
有多個問題:
有一個錯字
if (mynumber = 0): 這分配0并mynumber評估為假。此外,您的測驗
if (mynumber / 10 == 9)不會檢查最后一位數字是否mynumber是 a9: 您應該改用if (mynumber % 10 == 9)該子句也不正確:如果最后一位數字已經是 a
else,則應改為檢查一秒鐘。在分支中測驗這種情況總是會失敗。99else該
return宣告不正確:您應該添加counter, 而不是mynumber遞回呼叫。
以下是修改后的版本:
int recursiveNines(int mynumber) {
int counter = 0;
if (mynumber == 0) {
return 0;
}
if (mynumber % 10 == 9) {
counter ;
if (mynumber / 10 % 10 == 9)
counter ;
}
return counter recursiveNines(mynumber / 10);
}
int iterateNines(int mynumber) {
int counter = 0;
while (mynumber != 0) {
if (mynumber % 10 == 9) {
counter ;
if (mynumber / 10 % 10 == 9) {
counter ;
}
mynumber /= 10;
}
return counter;
}
這是使用單個運算式的遞回版本的替代方案:
int recursiveNines(int n) {
return (n == 0) ? 0 :
(n % 10 == 9) (n % 100 == 99) recursiveNines(n / 10);
}
uj5u.com熱心網友回復:
幾個問題:
mynumber = 0代替mynumber == 0else if (mynumber / 10 == 9 && mynumber / 100 == 9)分支永遠不會被構造,因為第一個分支將首先被占用。- 您使用除法 (
/) 而不是模 (%)。
嘗試:
int recursiveNines(int mynumber) {
int counter = 0;
if (mynumber == 0) {
return 0;
}
if (mynumber % 100 == 99) {
counter = 2;
} else if (mynumber % 10 == 9) {
counter = 1;
}
return counter recursiveNines(mynumber / 10);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494489.html
上一篇:如何為Channels實作BlockingCollection.TakeFromAny等價物?
下一篇:將嵌套字典拆分為單鍵路徑串列
