编程题#1:判断闰年
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB描述判断某年是否是闰年。输入输入只有一行,包含一个整数a(0 < a < 3000)输出一行,如果公元a年是闰年输出Y,否则输出N提示公历纪年法中,能被4整除的大多是闰年,但能被100整除而不能被400整除的年份不是闰年, 能被3200整除的也不是闰年,如1900年是平年,2000年是闰年,3200年不是闰年。//第12周//编程题#1:判断闰年//逻辑:闰年:能被4整除,但其中两种要被剔除:1.能被100整除而不能被400整除。2.能被3200整除#include <iostream>using namespace std;bool judge(int year){ bool flag = false; if (year % 4 == 0) //能被4整除 { flag = true; if (year % 100 == 0 && year % 400 != 0) flag = false;//剔除能被100整除而不能被400整除 if (year % 3200 == 0) flag = false;//剔除能被3200整除 } return flag;}int main(){ int year; cin >> year; bool flag = judge(year); if (flag) cout << 'Y' << endl; else cout << 'N' << endl; return 0;}编程题#2:能被3,5,7整除的数来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB描述输入一个整数,判断它能否被3,5,7整除,并输出以下信息:1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格);2、能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者 3 7或者5 7,中间用空格分隔)3、能被其中一个数整除(输出这个除数)4、不能被任何数整除;(输出小写字符'n',不包括单引号)输入一个数字输出一行数字,从小到大排列,包含3,5,7中为该输入的除数的数字,数字中间用空格隔开//编程题#2:能被3,5,7整除的数#include <iostream>using namespace std;int main(){ int num; while (cin>>num) if (num%3==0&&num%5==0&&num%7==0) { cout << "3 5 7"<< endl; } else if (num % 3 == 0 && num % 5 == 0 && num % 7 != 0) { cout << "3 5" << endl; } else if (num % 3 == 0 && num % 5 != 0 && num % 7 == 0) { cout << "3 7" << endl; } else if (num % 3 != 0 && num % 5 == 0 && num % 7 == 0) { cout << "5 7" << endl; } else if (num % 3 == 0 && num % 5 != 0 && num % 7 != 0) { cout << "3" << endl; } else if (num % 3 != 0 && num % 5 == 0 && num % 7 != 0) { cout << "5" << endl; } else if (num % 3 != 0 && num % 5 != 0 && num % 7 == 0) { cout << "7" << endl; } else { cout << "n" << endl; } return 0;}更简洁的写法:
#include <iostream>using namespace std;int main(){ int num = 0; bool flag = false; while(cin >> num) { if (num%3 == 0) { cout << "3 "; flag = true; } if (num%5 == 0) { cout << "5 "; flag = true; } if (num%7 == 0) { cout << "7"; flag = true; } if (flag == false) { cout << "n"; } cout << endl; flag = false; } return 0;}编程题#3:最远距离来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB描述给定一组点(x,y),求距离最远的两个点之间的距离。输入第一行是点数n(n大于等于2)接着每一行代表一个点,由两个浮点数x y组成。输出输出一行是最远两点之间的距离。使用cout << fixed << setPRecision(4) << dis << endl;输出距离值并精确到小数点后4位。fixed和setprecision是在<iomanip>头文件里定义的格式控制操作符,需要#include <iomanip>.//编程题#3:最远距离#include <iostream>using namespace std;#include <cmath>#include <iomanip>int main(){ double point[10][2] = { 0 }; //存储所有点的坐标(x,y) double distance[50] = { 0 }; //记录每两个点之间的距离 double result_max = 0; int n = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> point[i][0] >> point[i][1]; } int m = 0; for (int i = 0; i < n - 1; i++) //对所有point向前两两组合,求出距离 for (int j = i + 1; j < n; j++) { double result = sqrt((point[i][0] - point[j][0])*(point[i][0] - point[j][0]) + (point[i][1] - point[j][1])*(point[i][1] - point[j][1])); distance[m] = result; //将距离记录在distance数组中 m++; } for (int i = 0; i < 50; i++) { //cout << "distance:" << distance[i] << endl; //调试用 if (distance[i] > result_max) result_max = distance[i]; } cout << fixed << setprecision(4) << result_max << endl; return 0;}编程题#4:简单计算器来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB描述一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。输入输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。输出输出只有一行,一个整数,为运算结果。然而:1. 如果出现除数为0的情况,则输出:Divided by zero!2. 如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid Operator!
#include <iostream>using namespace std;int main(){ int firstNum = 0, secondNum = 0; char operate = 0; cin >> firstNum >> secondNum >> operate; switch(operate) { case '+':cout << firstNum+secondNum << endl;break; case '-':cout << firstNum-secondNum << endl;break; case '*':cout << firstNum*secondNum << endl;break; case '/':if (secondNum == 0) //除数为0的情况应该单独放在除法里 { cout << "Divided by zero!" << endl; } else { cout << firstNum/secondNum << endl; } break; default:cout << "Invalid operator!" << endl;break; } return 0;}编程题#5:字符串插入来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB、描述有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。(字符个数不包括字符串结尾处的'/0'。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。输入输入包括若干行,每一行为一组测试数据,格式为str substr输出对于每一组测试数据,输出插入之后的字符串。提示这题有多组输入,请参照第二题的提示依次读入和处理每一组数据。如果使用了字符串函数,比如strlen,请包含cstring头文件 #include <cstring>。
这是我写的,结果是正确的,但是系统不接受。
//编程题#5:字符串插入#include <iostream>using namespace std;#include <cstring>int main(){ char a[10] = { 0 }; char b[4] = { 0 }; //大小定义为4,好让按ctrl+z终止(cin >> a >> b)时不报错:数组b越界。 while (cin >> a >> b) { char insert[13] = { 0 }; int position = 0; //记录ASCII码字符最大的位置 char max = 0; //找出ASCII码字符最大的位置 for (int i = 0; i < 10; i++) { if (a[i]>max) { max = a[i]; position = i; } } for (int i = 0; i <= position; i++) //将position及之前的字符拷贝进数组insert { insert[i] = a[i]; } for (int i = position + 1; i < strlen(a); i++) //将数组a中position之后的字符,后移三位存入insert数组中 { insert[i + 3] = a[i]; } //将数组b拷贝进数组insert中空出的三个位置 insert[position + 1] = b[0]; insert[position + 2] = b[1]; insert[position + 3] = b[2]; cout << insert << endl; //注意,这里直接cout输出字符数组。 } return 0;}这是参考的系统接收的答案,逻辑是一样的==:#include <iostream>using namespace std;int main(){ char str[14] = {0}, substr[4] = {0}; while (cin >> str >> substr) { int i = 0, posBiggest = 0; char strBiggest = 0; while (str[i]) { if (str[i] > strBiggest) { posBiggest = i; strBiggest = str[i]; } i++; } for (int j = 9; j > posBiggest; j--) { str[j+3] = str[j]; } str[posBiggest+1] = substr[0]; str[posBiggest+2] = substr[1]; str[posBiggest+3] = substr[2]; cout << str << endl; } return 0;}
新闻热点
疑难解答