1. 程式人生 > >計算導論與C語言基礎week8

計算導論與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個小時,久了點》。