【计2014级期中试题】素数判断。
问题描述:一个大于1的自然数,只能被1和它本身整除,不能被其它除0以外的自然数整除,则该数称之为素数。编写函数,判断一个整数是否为素数。
注:判断素数部分必须编写成一个独立于main()函数的其它函数。
输入:一个大于1的自然数
输出:根据是否是素数输出Y/N
样例1:
输入:3
输出:Y
样例2:
输入:51
输出:N
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; int main(){ int n; cin >> n; if(n == 2){ cout << "Y"; return 0; } if(n == 3){ cout << "Y"; return 0; } for(int i = 2;i < sqrt(n)+1;i++){ if(n % i == 0){ cout << "N"; return 0; } } cout << "Y"; }
题目编号:Exp03-Basic01,GJBook3-05-02
题目名称:组合问题
题目描述:编写程序,输入m,n的值,计算并输出函数f的值。
输入:一个整数m和一个整数n(m,n≤20)。
输出:函数f的值。
样例1:
输入:-1 2
输出:-1
样例2:
输入:2 2
输出:1
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; long long int ff(long long int t){ if(t == 1||t == 0){ return 1; }else{ return ff(t - 1)*t; } } int f(long long int m, long long int n){ if(m < n&&m > 0&&n > 0){ return 0; }else if(m == n&&m > 0&& n > 0){ return 1; }else if(m > n&& m > 0&&n > 0){ long long int count = 1; for(long long int i = n+1;i <= m;i++){ count *= i; } return count/ff(m - n); }else{ return -1; } } int main(){ long long int m,n; cin >> m >> n; cout << f(m,n); }
题目编号:Exp03-Extend01,GJBook3-12-04
题目名称:自守数
题目描述:若一个正整数a满足条件 a^2 的尾数等于a,则称a为自守数,例如:
25^2=625 、76^2=5776 、9376^2=87909376 都是自守数。
编写程序,求小于等于n的所有自守数。
输入:从键盘随机输入一个正整数n(<1000000)。
输出:输出小于n的所有自守数,每个数之间以一个西文空格间隔。
样例1:
输入:10
输出:1 5 6
样例2:
输入:100
输出:1 5 6 25 76
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <string> using namespace std; int wei(long long int n){ for(int i = 1;i < 100;i++){ n /= 10; if(n/10 == 0){ return i+1; } } } int iiff(int input){ if(input % 10 != 6 &&input % 10 != 5){ return 0; } if(input == 5||input == 6){ return 1; } long long int big = (long long int)input * (long long int)input; big %= (int)pow(10, wei(big) - wei(input)); if(big == input){ return 1; }else{ return 0; } } int main(){ int n; cin >> n; cout << 1 << " "; for(int i = 2;i < n;i++){ if(iiff(i)){ cout << i << " "; } } }
题目编号:Exp03-Basic02,GJBook3-05-06
题目名称:逆序数
题目描述:编写函数,求任意位自然数的逆序数,例如5432就是2345的逆序数。
输入:任意一个整数(<10^18) 。
输出:如果输入的不是自然数,则输出NULL;否则输出对应的逆序数。
样例1:
输入:120
输出:21
样例2:
输入:999999999999999999
输出:999999999999999999
样例3:
输入:-1357
输出:NULL
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <string> using namespace std; int main(){ long long int n; cin >> n; string s1; if(n == 0){ cout << 0; return 0; } if(n < 0){ cout << "NULL"; return 0; }else{ s1 = to_string(n); int i; for(i = s1.length() - 1;i >= 0;i--){ if(s1[i]=='0'){ continue; }else{ break; } } for(;i >= 0;i--){ cout << s1[i]; } } }
题目编号 :Exp03-Basic03
题目名称:多边形周长
题目描述:编写程序,求由键盘按顺时针方向输入n(0<n<=10)个顶点坐标的多边形周长(测试数据已保证当n>2时,各点按输入方向依次连接可构成封闭的n边形)。
输入:第一行输入一个整数,作为n值;以后每行两个浮点数(double),为多边形各顶点的坐标。
输出:多边形的周长,精确到小数点后2位。
样例1:
输入: 4 0 0 0 1 1 1 1 0
输出:4.00
样例2:
输入: 1 2 3
输出: 0.00
样例3:
输入: 2 2 3 2 4
输出: 1.00
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <string> using namespace std; double dis(double i1,double i2,double i3,double i4){ double count = 0; count += (double)pow((i2 - i1),2) + (double)pow((i4 - i3),2); count = sqrt(count); return count; } int main(){ int n; cin >> n; double a[100],b[100]; for(int i = 0;i < n;i++){ cin >> a[i] >> b[i]; } double count = 0; for(int i = 0;i < n - 1;i++){ count += dis(a[i],a[i+1],b[i],b[i+1]); } if(n == 1){ printf("0.00"); return 0; }else if(n == 2){ count = dis(a[0],a[1],b[0],b[1]); printf("%.2lf",count); return 0; } count += dis(a[0],a[n - 1],b[0],b[n - 1]); printf("%.2lf",count); }