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 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。
自然常数 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;
}