2015西电机试算法题
时间:2025年3月8日19:10:12 start->
Problem 1 题目描述 :请写一个程序,判断给定的整数序列能否构成等差数列。
输入说明 :多组数据,每组输入数据由两行构成,第一行只有一个整数n(n<1000),表示序列长度(即序列中整数的个数,0表示输入结束),第二行为n个整数。每个整数的取值区间都为[-32768—32767]->(int),证书之间以空格或挑格间隔。
输出说明 :对于每一组数据,输出一个yes或no,表示该序列能够构成等差数列。
输入样本 :
6
23 15 4 18 35 11
3
3 1 2
0
输出样本 :
no
yes
代码 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include <cstdio> #include <algorithm> #include <vector> using namespace std;int main () { int n,num; vector<int > nums; while (scanf ("%d" ,&n)!=EOF){ if (n==0 ){ break ; } if (n==1 ){ printf ("yes\n" ); continue ; } while (n--){ scanf ("%d" ,&num); nums.emplace_back (num); } sort (nums.begin (),nums.end ()); int delta=nums[1 ]-nums[0 ]; bool flag=true ; for (int i=2 ;i<nums.size ();++i){ if (nums[i]-nums[i-1 ]!=delta){ flag=false ; break ; } } if (flag){ printf ("yes\n" ); }else { printf ("no\n" ); } } }
Problem 2 题目描述 :任意输出一个三位数,判断该数是否是水仙花数,若是输出“yes”,否则输出”no”。水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身 。 例如:1^3^ + 5^3^+ 3^3^ = 153。
输入说明 :一个三位数num(范围是100到999)
输出说明 :”yes” or “no”
输入样本 :
153
输出样本 :
yes
代码 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <cstdio> using namespace std;int main () { int num; scanf ("%d" ,&num); int a=num%10 ; int b=num/10 %10 ; int c=num/100 ; if (a*a*a+b*b*b+c*c*c==num){ printf ("yes\n" ); }else { printf ("no\n" ); } return 0 ; }
Problem 3 题目描述 :Arnold变换时一种常见的图像置乱技术,Arnold变换定义如下:对任意N*N矩阵(素有元素相同的矩阵除外),设i,j为矩阵元素的起始下标,经过Arnold变换后行下标为i’,j’,其满足下式。
i'=(i+j) mod N
j'=(i+2j) mod N
i,j:0,1,2,...N-1
输入说明 :对输入的每一个N,给出N*N矩阵的Arnold变换的周期。
输出说明 :
输入样本 :
3
8
0
输出样本 :
4
6
代码 :
1 2 3 4 5 6 #include<cstdio> using namespace std; int main(){ }
Problem 4 题目描述 :对于一个正整数n,如果它的各位之和等于它的所有质因数之和,则该数被称为Smith数。例如,31257=33 23*151,31257的各位数字之和为3+1+2+5+7=18,它的所有质因数的各位数字之和为3+2+2+3+1+5+1=18,因此,31257是一个Smith数。编写一个程序判断输入的正整数是不是Smith数。
输入说明 :有多组数据,每组数据只有一个整数n(<100000,占一行),为0时表示输入结束。
输出说明 :对于每一组数据,输出一个yes或no(表示该数是否为Smith数)。
输入样本 :
31257
123
0
输出样本 :
yes
no
代码 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include <cstdio> # define N 100000 using namespace std;bool isPrime[N];void init () { memset (isPrime,true ,sizeof (prime)); prime[0 ]=prime[1 ]=false ; int upBound=sqrt (n); for (int i=2 ;i<=upBound;++i){ if (isPrime[i]){ for (int j=i*i;j<=n;j+=i){ isPrime[j]=false ; } } } } int bitSum (int num) { int sum=0 ; while (num){ sum+=num%10 ; num/=10 ; } return sum; } int factorSum (int num) { int sum=0 ; while (num){ } } int main () { init (); int n; while (scanf ("%d" ,&n)!=EOF){ if (n==0 ) break ; } return 0 ; }