2024第八次随堂测验参考答案

7-1 最好的文档

有一位软件工程师说过一句很有道理的话:“Good code is its own best documentation.”(好代码本身就是最好的文档)。本题就请你直接在屏幕上输出这句话。

输入格式:

本题没有输入。

输出格式:

在一行中输出 Good code is its own best documentation.

输入样例:

输出样例:

Good code is its own best documentation.

 参考答案:

#include<bits/stdc++.h>
using namespace std;
int main(){
    cout << "Good code is its own best documentation." << endl;
    return 0;
}

7-2 输出三角形面积和周长

本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=s(s−a)(s−b)(s−c)​,其中s=(a+b+c)/2。

输入格式:

输入为3个正整数,分别代表三角形的3条边a、b、c。

输出格式:

如果输入的边能构成一个三角形,则在一行内,按照

area = 面积; perimeter = 周长

的格式输出,保留两位小数。否则,输出

These sides do not correspond to a valid triangle

输入样例1:

5 5 3

输出样例1:

area = 7.15; perimeter = 13.00

输入样例2:

1 4 1

输出样例2:

These sides do not correspond to a valid triangle

参考答案:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,c;
    cin >> a >> b >> c;
    if ((a+b > c) && (a+c > b) && (b+c > a)) {
        double area = 0, perimeter = 0;
        perimeter = a+b+c;
        double s = (a+b+c)/2.0;
        area = sqrt(s*(s-a)*(s-b)*(s-c));
        printf("area = %.2f; perimeter = %.2f\n", area, perimeter);
    }else {
        cout << "These sides do not correspond to a valid triangle" << endl;
    }
    return 0;
}

7-3 水仙花数

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3≤N≤7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:

3

输出样例:

153
370
371
407

参考答案:

#include <bits/stdc++.h>
using namespace std;
int Pow(int n, int m){
	int sum = 1;
	for (int i = 1; i <= n; i++)
		sum *= m;
	return sum;
}
int main(){
	int n;
	cin >> n;
	for (int i = Pow(n-1,10); i < Pow(n,10); i++){
		int flag = i;
		int sum = 0;
		for (int j = 0; j < n; j++){
			sum += Pow(n,flag%10);
			flag = flag/10;
		}
		if (sum == i) cout << i << endl;	
	}
	return 0;
}

7-4 说反话-加强版

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World   Here I Come

输出样例:

Come I Here World Hello

参考答案:

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    vector<string> v;
    while(cin >> s){
        v.push_back(s);
    }
    for (int i = v.size()-1; i >= 0; i--) {
        if (i != v.size()-1) cout << " ";
        cout << v[i];
    }
    return 0;
}

7-5 谷歌的招聘

2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。

prime.jpg

自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921... 其中粗体标出的 10 位数就是答案。

本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。

输入格式:

输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。

输出格式:

在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。

输入样例 1:

20 5
23654987725541023819

输出样例 1:

49877

输入样例 2:

10 3
2468001680

输出样例 2:

404

参考答案:

#include <bits/stdc++.h>
using namespace std;
bool isPrime(int x) {
    bool flag = true;
    if (x == 0) flag = false;
    if (x == 1) flag = false;
    if (x == 2) flag = true;
    if (x > 2) {
        for (int i = 2; i <= sqrt(x); i++) {
            if (x%i == 0) {
                flag = false;
                break;
            }
        }
    }
    return flag;
}
int main(){
    int l, k;
    cin >> l >> k;
    string s;
    cin >> s;
    for (int i = 0; i <= l-k; i++) {
        string temp = s.substr(i, k);
        int num = stoi(temp);
        if (isPrime(num)) {
            cout << temp << endl;
            return 0;
        }
    }
    cout << "404" << endl;
    return 0;
}

7-6 找鞍点

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:

输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

输出样例1:

2 1

输入样例2:

2
1 7
4 1

输出样例2:

NONE

参考答案:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin >> n;
    int a[10][10];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n ; j++) {
            cin >> a[i][j];
        }
    }
    bool flag1 = false;    //表示没有鞍点
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n ; j++) {
            int num = a[i][j];
            bool flag2 = true;    //表示暂时符合鞍点
            for (int k = 0; k < n; k++) {
                //变成false代表不再符合鞍点要求
                if (a[k][j] < num) {flag2 = false; break;}
                if (a[i][k] > num) {flag2 = false; break;}
            }
            if (flag2 == true) {
                flag1 = true;    //变成true表示存在鞍点
                cout << i << " " << j << endl;
            }
        }
    }
    if (flag1 == false) {
        cout << "NONE" << endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值