找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
尊貴會員無限下載附件儲值後自動升級用戶組認識好友、聊天,分享生活趣事
火影忍者三上新竹銀魂ge按摩
天才医生美少女万辜莞虜姫罠にハメ反派角色迷い猫

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]關於我轉生變成史

[繁]身為魔王的我娶了

(4月新番)[繁]鬼滅之

見死不救到這種地步

[繁]我的英雄學院 Mem

[繁]老夫老妻重返青春
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 3324|回復: 17
打印上一主題下一主題

[問題]遞迴基本觀念詢問[複製鏈接]

st474ddr 該用戶已被刪除
跳轉到指定樓層
樓主
發表於 2016-5-20 04:11 PM|只看該作者|倒序瀏覽
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。
本帖最後由 st474ddr 於 2016-5-20 04:12 PM 編輯

小弟剛開始學程式
最近看到了遞迴這個東西
對這個觀念還不是很了解
就做一些線上題目來練習
但是碰到了瓶頸>"<
像這題
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏0支持支持0
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

帖子
100
積分
93 點
潛水值
9200 米
頭香
發表於 2016-5-20 08:26 PM|只看該作者
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。
本帖最後由 gitlab 於 2016-5-20 08:26 PM 編輯

i 應該是 0 ~ a 吧? j,k 同理應該是 0~b, 0~c

而且題目是說 "每個test case 輸出一行",你現在最後會少一個'\n'


最後你這樣寫太容易出錯了...

1. a,b,c 很大時候  這一定TLE
2. lv_a * i + lv_b * j + lv_c * k 這有可能 overflow
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

st474ddr 該用戶已被刪除
3
發表於 2016-5-21 01:41 AM|只看該作者
本帖最後由 st474ddr 於 2016-5-21 01:45 AM 編輯
gitlab 發表於 2016-5-20 08:26 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

i 應該是 0 ~ a 吧? j,k 同理應該是 0~b, 0~c

而且題目是說 "每個test case 輸出一行",你現在最後會少一 ...
...
瀏覽完整內容,請先 註冊登入會員
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

使用道具檢舉

st474ddr 該用戶已被刪除
4
發表於 2016-5-21 07:41 PM|只看該作者
我把範圍改了
真的是0~a的關係
感謝大大~
但是我還是很想知道遞迴的寫法
感覺會遞迴可以方便很多~

使用道具檢舉

帖子
100
積分
93 點
潛水值
9200 米
5
發表於 2016-5-21 09:57 PM|只看該作者
這題用遞迴不會比較方便 但也有可能是我沒想到..




使用道具檢舉

  尊貴會員

Melty Snow  雪靈

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
3224
積分
24365 點
潛水值
77380 米
6
發表於 2016-5-22 06:34 AM|只看該作者
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
本帖最後由 snowflying 於 2016-5-22 06:35 AM 編輯
st474ddr 發表於 2016-5-21 01:41 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

恩恩感謝大大
我也有考慮到TLE的情況
但是是吃了WA
...
瀏覽完整內容,請先 註冊登入會員
Melty Snow [雪靈]
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com

使用道具檢舉

Rank: 1

帖子
575
積分
196 點
潛水值
14681 米
7
發表於 2016-5-22 11:38 AM|只看該作者
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
snowflying 發表於 2016-5-22 06:34 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

其實可以少掉一層,前兩層的和知道後,最後一層用數學處理

借用snowflying程式碼再加一些東西:
1.判斷 i , j 要跑的上限,避免A*i或B*j>remain的情形
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

帖子
100
積分
93 點
潛水值
9200 米
8
發表於 2016-5-22 03:54 PM|只看該作者
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。
呃…要減少迴圈數的話 應該把 min(a,D/A), min(b,D/B), min(c,D/C) 數字最大的放"外面"

使用道具檢舉

Rank: 2Rank: 2

帖子
274
積分
373 點
潛水值
8890 米
9
發表於 2016-5-22 04:55 PM|只看該作者
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php
題目是不是有等全部的 input 輸入完,再一次將所有結果 output 的意思?

還是我誤會了

使用道具檢舉

st474ddr 該用戶已被刪除
10
發表於 2016-5-23 12:01 AM|只看該作者
a333221 發表於 2016-5-22 04:55 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

題目是不是有等全部的 input 輸入完,再一次將所有結果 output 的意思?

還是我誤會了

沒有 一個case 的 input輸入完後
...
瀏覽完整內容,請先 註冊登入會員





分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。

使用道具檢舉

Rank: 2Rank: 2

帖子
274
積分
373 點
潛水值
8890 米
11
發表於 2016-5-23 09:37 PM|只看該作者
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。
st474ddr 發表於 2016-5-23 12:01 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

沒有 一個case 的 input輸入完後
會馬上output

如果沒有「等全部的 input 輸入完,再一次將所有結果 output」的要求,
...
瀏覽完整內容,請先 註冊登入會員
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

  尊貴會員

Melty Snow  雪靈

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
3224
積分
24365 點
潛水值
77380 米
12
發表於 2016-5-24 12:56 AM|只看該作者
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。
a333221 發表於 2016-5-23 09:37 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

如果沒有「等全部的 input 輸入完,再一次將所有結果 output」的要求,
那 notes 的要求好像沒什麼必要, ...

依照印象,大部分都是把輸出寫到檔案,然後與答案的檔案比對
...
瀏覽完整內容,請先 註冊登入會員
Melty Snow [雪靈]
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。

使用道具檢舉

Rank: 1

帖子
575
積分
196 點
潛水值
14681 米
13
發表於 2016-5-24 03:00 AM|只看該作者
還是勉強自己寫遞迴版了。
真的覺得不能用陣列跟指標不合理阿,能用的話根本不用switch…case那段。
  1. int a,b,c,A,B,C,D; //讀取資料後,存放在廣域變數中(因為不能用陣列跟指標,又不想重複傳資料)

  2. int IsLotion(int remain,int id)
  3. {
  4.         int num,power,i,r;
  5.         switch(id) //不能用陣列跟指標,只好用這麼醜的寫法
  6.         {
  7.                 case 0:
  8.                         num=a;
  9.                         power=A;
  10.                         break;
  11.                 case 1:
  12.                         num=b;
  13.                         power=B;
  14.                         break;
  15.                 case 2:
  16.                         num=c;
  17.                         power=C;
  18.                         break;
  19.         }
  20.         for(i=num<=remain/power?num:remain/power;i>=0;--i)
  21.         {
  22.                 r=remain-i*power;
  23.                 if(r==0 || (id<2 && func(r,id+1)))
  24.                         return 1;
  25.         }
  26.         return 0;
  27. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

Rank: 2Rank: 2

帖子
274
積分
373 點
潛水值
8890 米
14
發表於 2016-5-24 11:46 PM|只看該作者
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。
snowflying 發表於 2016-5-24 12:56 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

依照印象,大部分都是把輸出寫到檔案,然後與答案的檔案比對
所以是不是一次輸出,都可以
至於 notes 的 ...

...
瀏覽完整內容,請先 註冊登入會員
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

inunu 該用戶已被刪除
15
發表於 2016-5-25 08:06 AM|只看該作者
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php
只要背後的邏輯不變, 迴圈或遞迴都一樣, 只是喜好選擇
為了用遞迴而刻意去套個不一樣的邏輯才是本末倒置
  1. #include <stdio.h>

  2. #define MIN(a, b)       ((a) < (b) ? (a) : (b))
  3. #define MAX(a, b)       ((a) > (b) ? (a) : (b))

  4. static int power;
  5. static int qtyA, qtyB, qtyC;
  6. static int powA, powB, powC;

  7. int TestR(int a, int b, int which)
  8. {
  9.     int min, max, i;
  10.     int powerNeeded;

  11.     switch(which)
  12.     {
  13.     case 0:
  14.         min = (power - qtyB * powB - qtyC * powC) / powA;
  15.         min = MAX(min, 0);
  16.         max = power / powA;
  17.         max = MIN(max, qtyA);
  18.         for (i = min; i <= max; i++)
  19.         {
  20.             if (TestR(i, 0, 1))
  21.             {
  22.                 return 1;
  23.             }
  24.         }
  25.         break;

  26.     case 1:
  27.         powerNeeded = power - a * powA;
  28.         min = (powerNeeded - qtyC * powC) / powB;
  29.         min = MAX(min, 0);
  30.         max = powerNeeded / powB;
  31.         max = MIN(max, qtyB);
  32.         for (i = min; i <= max; i++)
  33.         {
  34.             if (TestR(a, i, 2))
  35.             {
  36.                 return 1;
  37.             }
  38.         }
  39.         break;

  40.     default:
  41.         powerNeeded = power - a * powA - b * powB;
  42.         if (powerNeeded % powC == 0)
  43.         {
  44.             if (powerNeeded / powC <= qtyC)
  45.             {
  46.                 return 1;
  47.             }
  48.         }
  49.         break;
  50.     }

  51.     return 0;
  52. }

  53. int TestL()
  54. {
  55.     int minA = (power - qtyB * powB - qtyC * powC) / powA;
  56.     minA = MAX(minA, 0);
  57.     int maxA = power / powA;
  58.     maxA = MIN(maxA, qtyA);
  59.     int a;

  60.     for (a = minA; a <= maxA; a++)
  61.     {
  62.         int powerNeededB = power - a * powA;
  63.         int minB = (powerNeededB - qtyC * powC) / powB;
  64.         minB = MAX(minB, 0);
  65.         int maxB = powerNeededB / powB;
  66.         maxB = MIN(maxB, qtyB);
  67.         int b;

  68.         for (b = minB; b <= maxB; b++)
  69.         {
  70.             int powerNeededC = powerNeededB - b * powB;
  71.             if (powerNeededC % powC == 0)
  72.             {
  73.                 int c = powerNeededC / powC;
  74.                 if (c <= qtyC)
  75.                 {
  76.                     return 1;
  77.                 }
  78.             }
  79.         }
  80.     }

  81.     return 0;
  82. }

  83. int main()
  84. {
  85.     int n;
  86.     scanf("%d", &n);
  87.     while(n--)
  88.     {
  89.         int found = 0;

  90.         scanf("%d %d %d %d %d %d %d", &power,
  91.               &qtyA, &qtyB, &qtyC,
  92.               &powA, &powB, &powC);

  93.         found = TestR(0, 0, 0);
  94.         print f("%s\n", found ? "yes" : "no");

  95.         found = TestL();
  96.         print f("%s\n", found ? "yes" : "no");
  97.     }

  98.     return 0;
  99. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員





使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部