計算導論與C語言基礎week8
抄寫題.列舉法
4名專家對4款賽車進行評論
1)A說:2號賽車是最好的;
2)B說:4號賽車是最好的;
3)C說:3號賽車不是最好的;
4)D說: B說錯了。
事實上只有1款賽車最佳,且只有1名專家說對了,其他3人都說錯了。
請程式設計輸出最佳車的車號,以及說對的專家。
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d,car;
for (car = 1; car <= 5; car++) {
//列舉就在這個for迴圈體現的,car從1到5看哪個滿足條件
a = (car == 2);
b = (car == 4);
c = (car != 3);
d = (car != 4);
if (a + b + c + d == 1)//這個是隻有1個說的正確
break;
}
cout << car << endl;
if (a == 1)cout << 'A' << endl;
else if (b == 1)cout << 'B' << endl;
else if (c == 1)cout << 'C' << endl;
else cout << 'D' << endl;
return 0;
}
2.騎車與走路
描述
在北大校園裡,沒有自行車,上課辦事會很不方便.但實際上,並非去辦任何事情都是騎車快,因為騎車總要找車、開鎖、停車、鎖車等,這要耽誤一些時間.假設找到自行車,開鎖並車上自行車的時間為27秒;停車鎖車的時間為23秒;步行每秒行走1.2米,騎車每秒行走3.0米.請判斷走不同的距離去辦事,是騎車快還是走路快.
輸入
第一行為待處理的資料的數量n
其後每一行整數為一次辦事要行走的距離,單位為米.
輸出
對應每個整數,如果騎車快,輸出一行”Bike”;如果走路快,輸出一行”Walk”;如果一樣快,輸出一行”All”.
#include <iostream>
using namespace std;
int main()
{
int n,i,s;
int b = 27 + 23;//騎車的固定消耗時間
double v_w = 1.2, v_b = 3.0;//走路,騎車速度
cin >> n;
for (i = 0; i < n; i++) {
cin >> s;
double t1, t2;
t1 = b + s / v_b;
t2 = s / v_w;
if (t1 > t2)cout << "Walk" << endl;
else if (t1 < t2)cout << "Bike" << endl;
else cout << "All" << endl;
}
return 0;
}
3.買房子
描述
某程式設計師開始工作,年薪N萬,他希望在中關村公館買一套60平米的房子,現在價格是200萬,假設房子價格以每年百分之K增長,並且該程式設計師未來年薪不變,且不吃不喝,不用交稅,每年所得N萬全都積攢起來,問第幾年能夠買下這套房子(第一年房價200萬,收入N萬)。程式設計師每年先拿工資,再嘗試買房,然後房子才漲價。
輸入
有多行,每行兩個整數N(10 <= N <= 50), K(1 <= K <= 20)
輸出
針對每組資料,如果在第20年或者之前就能買下這套房子,則輸出一個整數M,表示最早需要在第M年能買下,否則輸出Impossible,輸出需要換行
#include <iostream>
using namespace std;
int main()
{
int N, K;
while (cin >> N >> K) {
//這段是C++裡多行輸入(在不知道一共有多少行的情況下),每輸入一組資料就可以輸出其結果,不用等待所有資料都輸入完畢。
double price = 200;//price存房價
int year = 1;
int store = N;//年薪
while (store < price && year <= 20){
store += N;
price += price*K / 100.0;
year++;
}
if (store < price)cout << "Impossible" << endl;
else cout << year << endl;
}
return 0;
}
4.找和為k的兩個元素
描述
在一個長度為n(n < 1000)的整數序列中,判斷是否存在某兩個元素之和為k。
輸入
第一行輸入序列的長度n和k,用空格分開。
第二行輸入序列中的n個整數,用空格分開。
輸出
如果存在某兩個元素的和為k,則輸出yes,否則輸出no。
#include <iostream>
using namespace std;
int main()
{
int n, k,i,j;
int flag = 0;
cin >> n >> k;
int a[1000] = { 0 };
for (i = 0; i < n; i++) {
cin >> a[i];
}
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (a[i] + a[j] == k) {
flag = 1;//找到的話標誌置1
break;
}
}
}
if (flag == 1)cout << "yes" << endl;
else cout << "no" << endl;
return 0;
}
5.自除整數
描述
對一個整數n,如果其各個位數的數字相加得到的數m能整除n,則稱n為自整除數.例如21,21%(2+1)==0,所以21是自整除數.現求出從10到n(n < 100)之間的所有自整除數.
輸入
有一行,整數n,(10 <= n < 100)
輸出
有多行.按從小到大的順序輸出所有大於等於10,小於等於n的自整除數,每行一個自整除數.
#include <iostream>
using namespace std;
int main()
{
int n, i;
cin >> n;
for (i = 10; i <= n; i++) {
int a1 = i / 10;//十位
int a2 = i % 10;//個位
if (i % (a1 + a2) == 0)cout << i << endl;
}
return 0;
}
這個week8看視訊課程和作業題用了4個小時,久了點》。