最近在利用空閑時間跟Coursera上北京大學的程序設(shè)計與算法專項課程,一共7門課程,這是第一門課計算導論與C語言基礎(chǔ)。
編程題#1:數(shù)字求和來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績。)注意: 總時間限制: 1000ms 內(nèi)存限制: 65536kB描述給定一個正整數(shù)a,以及另外的5個正整數(shù),問題是:這5個整數(shù)中,小于a的整數(shù)的和是多少?輸入輸入一行,只包括6個小于100的正整數(shù),其中第一個正整數(shù)就是a。輸出輸出一行,給出一個正整數(shù),是5個數(shù)中小于a的數(shù)的和。
//第八周//編程題#1:數(shù)字求和#include <iostream>using namespace std;int main(){ int num1, num2, num3, num4, num5, num6,sum; num1= num2= num3= num4= num5=num6 =sum= 0; cin >> num1 >> num2 >> num3 >> num4 >> num5 >> num6; if (num2 < num1) sum += num2; if (num3 < num1) sum += num3; if (num4 < num1) sum += num4; if (num5 < num1) sum += num5; if (num6 < num1) sum += num6; cout << sum<<endl; return 0;}編程題#2:騎車與走路來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績。)注意: 總時間限制: 1000ms 內(nèi)存限制: 65536kB描述在北大校園里,沒有自行車,上課辦事會很不方便.但實際上,并非去辦任何事情都是騎車快,因為騎車總要找車、開鎖、停車、鎖車等,這要耽誤一些時間.假設(shè)找到自行車,開鎖并車上自行車的時間為27秒;停車鎖車的時間為23秒;步行每秒行走1.2米,騎車每秒行走3.0米.請判斷走不同的距離去辦事,是騎車快還是走路快.輸入第一行為待處理的數(shù)據(jù)的數(shù)量n其后每一行整數(shù)為一次辦事要行走的距離,單位為米.輸出對應每個整數(shù),如果騎車快,輸出一行"Bike";如果走路快,輸出一行"Walk";如果一樣快,輸出一行"All".//編程題#2:騎車與走路#include <iostream>using namespace std;int main(){ int n= 0; cin >> n; double s[50] = { 0 }; double t_bike[50] = { 0 }; double t_walk[50] = { 0 }; for (int i = 0;i<n;i++) { cin >> s[i]; t_bike[i] = s[i] / 3 + 27 + 23; t_walk[i] = s[i] / 1.2; } for (int i = 0; i < n; i++) { if (t_bike[i] < t_walk[i]) { cout << "Bike" << endl; } else if (t_bike[i] > t_walk[i]) { cout << "Walk" << endl; } else { cout << "All"<<endl; } } return 0;}編程題#3:買房子來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績。)注意: 總時間限制: 1000ms 內(nèi)存限制: 65536kB描述某程序員開始工作,年薪N萬,他希望在中關(guān)村公館買一套60平米的房子,現(xiàn)在價格是200萬,假設(shè)房子價格以每年百分之K增長,并且該程序員未來年薪不變,且不吃不喝,不用交稅,每年所得N萬全都積攢起來,問第幾年能夠買下這套房子(第一年房價200萬,收入N萬)。程序員每年先拿工資,再嘗試買房,然后房子才漲價。輸入有多行,每行兩個整數(shù)N(10 <= N <= 50), K(1 <= K <= 20)輸出針對每組數(shù)據(jù),如果在第20年或者之前就能買下這套房子,則輸出一個整數(shù)M,表示最早需要在第M年能買下,否則輸出Impossible,輸出需要換行//編程題#3:買房子#include <iostream>using namespace std;int main(){ double n, k, total; n = k = 0; while (cin >> n >> k) { total = 200; bool success = 0; for (int i = 1; i <= 20; i++) { if (i*n >= total) { success = 1; cout << i << endl; break; } total *= (1 + k/100); } if (success == 0) { cout << "Impossible" << endl; } } return 0;}編程題#4:找和為K的兩個元素來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績。)注意: 總時間限制: 1000ms 內(nèi)存限制: 65536kB描述在一個長度為n(n < 1000)的整數(shù)序列中,判斷是否存在某兩個元素之和為k。輸入第一行輸入序列的長度n和k,用空格分開。第二行輸入序列中的n個整數(shù),用空格分開。輸出如果存在某兩個元素的和為k,則輸出yes,否則輸出no。這是我的答案,輸出是對的,但是系統(tǒng)接受時認為不對。這題邏輯很簡單,我改了很多次,但實在不知道為什么系統(tǒng)不接受==
//編程題#4:找和為K的兩個元素#include <iostream>using namespace std;int main(){ int n, k; n = k = 0; int num[1001] = { 0 }; bool exist = 0; cin >> n >> k; for (int i = 0; i < n;i++) { cin >> num[i]; } for (int i = 0; i < n; i++) { for (int j = i + 1; i < n; j++) { if (num[i] + num[j] == k) { exist = 1; break; //此處break只是跳出內(nèi)層for循環(huán) } } if (exist) break; //注意此處用break跳出外層for循環(huán) } if (exist) { cout << "yes" << endl; } else { cout << "no" << endl; } return 0;}這是網(wǎng)上參考的正確的答案,我感覺邏輯跟我的是一樣的--#include<iostream> using namespace std; int main() { int n, k; cin >> n >> k; bool find = false; int i,j; int number[300]; for ( i = 0; i < n; i++) { cin >> number[i]; } for ( i = 0; i < n; i++) { for ( j = 0; j < n; j++) { if ((i!= j)&&(number[i] + number[j] == k)) { find = true; break; } } } if(find ==false) cout << "no" << endl; if (find == true) cout << "yes" << endl; return 0; } 編程題#5:自整除數(shù)來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績。)注意: 總時間限制: 1000ms 內(nèi)存限制: 65536kB描述對一個整數(shù)n,如果其各個位數(shù)的數(shù)字相加得到的數(shù)m能整除n,則稱n為自整除數(shù).例如21,21%(2+1)==0,所以21是自整除數(shù).現(xiàn)求出從10到n(n < 100)之間的所有自整除數(shù).輸入有一行,整數(shù)n,(10 <= n < 100)輸出有多行.按從小到大的順序輸出所有大于等于10,小于等于n的自整除數(shù),每行一個自整除數(shù).//編程題#5:自整除數(shù)#include <iostream>using namespace std;int function(int num){ int num_ge, num_shi, num_bai,sum; num_ge = num_shi = num_bai =sum= 0; num_bai = num / 100; num_shi = (num - num_bai * 100)/10; num_ge = num - num_bai * 100 - num_shi * 10; sum = num_ge + num_shi + num_bai; return sum;}int main(){ int n,sum; n = sum=0; cin >> n; for (int i = 10; i < n; i++) { sum = function(i); if (i%sum == 0) { cout << i << endl; } } return 0;}
新聞熱點
疑難解答