计算导论与C语言基础week8

来源:互联网 发布:java 微信支付api 编辑:程序博客网 时间:2024/05/16 07:24

抄写题.枚举法

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个小时,久了点》。

原创粉丝点击