怎樣能讓它輸出正確結果呢?現在輸出為0
#include <stdio.h>
#include <math.h>
int main(){
int year=1; //年數
int num=1; //牛數
int count=0; //計數器
do{
if(year%4==0){
count++;
printf("%d\n",pow(2,count));
}else{
printf("%d\n",pow(2,count));
}
year++; //這條陳述句有必要寫嗎,while條件為真走完回圈時候會退出回圈去走下邊的year++呢?
}while(year>=4 && year<=20);
year++;
}
uj5u.com熱心網友回復:
while條件不對,year大于等于4多余。開始條件不成立退出了。uj5u.com熱心網友回復:

emmm 還是不對
uj5u.com熱心網友回復:
演算法也不對,是第4年開始生,不是每4年生一個。第4年出生的小母牛第7年又開始生…
我總覺得結果至少得加一頭公牛!!!
uj5u.com熱心網友回復:
哦哦 是呢 我的演算法內容也不對 哈哈哈 這個公牛 題目沒說吧
uj5u.com熱心網友回復:
這個題還挺繞的,想半天。你得使用個陣列記錄下連續4年牛的數目。
f(1) = f(2) = f(3) = 1; //1/2/3這些引數表示第幾年,f(1)/f(2)/f(3)表示對應年份牛的數量
f(4) = (f3) + f(1); //第4年牛的數目等于 前一年牛的數目 + 第四年成熟的的牛的數目(也就是3年前牛的數目)
f(5) = (f4) + f(2);
...
f(20) = f(19) + f(17);
uj5u.com熱心網友回復:
我這回圈的寫出來了 怎么改寫成遞回演算法呢 ?
#include <stdio.h>
int main(){
int year; //年數
int num=1; //牛數
int count; //計數器
for(year=1;year<=20;year++){
count=(year/4);
num=num+count;
printf("%d\n",num);
}
}
uj5u.com熱心網友回復:
能不遞回就別遞回,性能不好。企業產品中一般不讓用,容易出問題。你要使用陣列記錄了最近3年的牛數目的話,回圈就出來了。遞回是給懶人用的,參考如下:
int f(int year)
{
if(year < 4)
return 1;
return f(year-1) + f(year-3)
}
這東西有點像初中學會了方程,就不會用小學的方法解題了。
uj5u.com熱心網友回復:
能不遞回就別遞回,性能不好。企業產品中一般不讓用,容易出問題。你要使用陣列記錄了最近3年的牛數目的話,回圈就出來了。遞回是給懶人用的,參考如下:
int f(int year)
{
if(year < 4)
return 1;
return f(year-1) + f(year-3)
}
這東西有點像初中學會了方程,就不會用小學的方法解題了。
uj5u.com熱心網友回復:
哈哈哈 好的 這不是為了應付作業嗎 謝謝轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77451.html
標籤:C++ 語言
上一篇:bresenham直線演算法
