A + B分数: 1.8
标签
- A+B
- 字符串与数字对应
- 字符串处理
题目描述
读入两个小于100的正整数A和B,计算A+B.
需要注意的是:A和B的每一位数字由对应的英文单词给出.
输入格式
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
输出
对每个测试用例输出1行,即A+B的值.
样例输入
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
样例输出
3
90
96
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 浙江大学研究生复试上机真题
- 这题天勤书上 “=”前面和“+”两边是没有空格的,但是
- 原题是有的== 害我调试的半天 坑爹!!
-
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int zhuan(string s) 6 { 7 if(s=="zero") return 0; 8 if(s=="one") return 1; 9 if(s=="two") return 2; 10 if(s=="three") return 3; 11 if(s=="four") return 4; 12 if(s=="five") return 5; 13 if(s=="six") return 6; 14 if(s=="seven") return 7; 15 if(s=="eight") return 8; 16 if(s=="nine") return 9; 17 } 18 int main() 19 { 20 string s; 21 while(cin>>s) 22 { 23 int n=0; 24 int n1=0;int n2=0; 25 string ss[6]; 26 ss[n]=s; 27 n++; 28 while(cin>>s) 29 { 30 ss[n]=s; 31 if(ss[n]=="=") break; 32 n++; 33 } 34 if(ss[0]=="zero"&&ss[2]=="zero") break; 35 int i=0; 36 while(ss[i]!="+") 37 { 38 n1=n1*10+zhuan(ss[i]); 39 i++; 40 } 41 i++; 42 while(ss[i]!="=") 43 { 44 n2=n2*10+zhuan(ss[i]); 45 i++; 46 } 47 cout<<n1+n2<<endl; 48 } 49 return 0; 50 }
Fibonacci分数: 1
标签
- 斐波那契数列
题目描述
The Fibonacci Numbers{0,1,1,2,3,5,8,13,21,34,55...} are defined by the recurrence:
F0=0 F1=1 Fn=Fn-1+Fn-2,n>=2
Write a program to calculate the Fibonacci Numbers.
输入格式
Each case contains a number n and you are expected to calculate Fn.(0<=n<=30) 。
输出
For each case, print a number Fn on a separate line,which means the nth Fibonacci Number.
样例输入
1
样例输出
1
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 上海交通大学究生复试上机真题
-
1 #include <iostream> 2 using namespace std; 3 int fi[30]; 4 int main() 5 { 6 fi[0]=0; 7 fi[1]=1; 8 for(int i=2;i<=30;i++) 9 { 10 fi[i]=fi[i-1]+fi[i-2]; 11 } 12 int n; 13 while(cin>>n) 14 { 15 cout<<fi[n]<<endl; 16 } 17 return 0; 18 }
对称平方数分数: 1.2
标签
- 简单数学题
- 对称平方数
题目描述
打印所有不超过256,其平方具有对称性质的数。如2,11就是这样的数,因为2*2=4,11*11=121。
输入格式
无任何输入数据
输出
输出具有题目要求的性质的数。如果输出数据不止一组,各组数据之间以回车隔开。
样例输入
样例输出
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 清华大学研究生复试上机真题
-
1 #include <iostream> 2 #include <sstream> 3 #include <string> 4 #include <algorithm> 5 using namespace std; 6 int main() 7 { 8 9 for(int i=0;i<256;i++) 10 { 11 string s; 12 stringstream ss; 13 ss<<i*i; 14 ss>>s; 15 string s2=s; 16 reverse(s.begin(),s.end()); 17 if(s2==s) cout<<i<<endl; 18 } 19 20 return 0; 21 }
最大公约数分数: 1
标签
- 简单数学题
- 最大公约数
题目描述
输入两个正整数,求其最大公约数。
输入格式
测试数据有多组,每组输入两个正整数。
输出
对于每组输入,请输出其最大公约数。
样例输入
49 14
样例输出
7
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 哈尔滨工业大学究生复试上机真题
-
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int maxyue(int m,int n) 5 { 6 7 int temp=n; 8 n=m%n; 9 m=temp; 10 if(n==0) return m; 11 else return maxyue(m,n); 12 } 13 int main() 14 { 15 int n1,n2,m,n; 16 while(cin>>n1) 17 { 18 cin>>n2; 19 if(n1>n2) 20 { 21 m=n1;n=n2; 22 } 23 else 24 { 25 m=n2;n=n1; 26 } 27 int yue=maxyue(m,n); 28 cout<<yue<<endl; 29 } 30 return 0; 31 }
完数分数: 1.5
标签
- 简单数学题
- 分解因子
- 完数
题目描述
求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。
输入格式
测试数据有多组,输入n,n数据范围不大。
输出
对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
样例输入
6
样例输出
6
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 哈尔滨工业大学究生复试上机真题
-
1 #include <iostream> 2 #include <math.h> 3 using namespace std; 4 bool IsPerfect(int n) 5 { 6 int len=(int)sqrt((double)n); 7 int sum=1;//当n>1时,1是真因子,n不是 8 for(int i=2;i<=len;i++) 9 { 10 if(n%i==0) sum+=i+n/i;//加上自己 和 对应的真因子 11 } 12 //若存在整数x,n=x*x,则x多加了一次 13 if(n==len*len) sum-=len;//当n=1时,在这里已经排除 14 bool temp; 15 if(sum==n) temp=true; 16 else temp=false; 17 return temp; 18 } 19 int main() 20 { 21 int n; 22 while(cin>>n) 23 { 24 int i; 25 for( i=1;i<=n;i++) 26 if(IsPerfect(i)) 27 { 28 cout<<i;break; 29 } 30 for(int j=i+1;j<=n;j++) 31 if(IsPerfect(j)) 32 { 33 cout<<" "<<j; 34 } 35 cout<<endl; 36 } 37 return 0; 38 }
素数判定分数: 1
标签
- 素数判定
题目描述
给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。
输入格式
测试数据有多组,每组输入一个数n。
输出
对于每组输入,若是素数则输出yes,否则输入no。
样例输入
13
样例输出
yes
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 哈尔滨工业大学究生复试上机真题
-
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 while(cin>>n) 7 { 8 bool su=1; 9 for(int i=2;i<n;i++) 10 { 11 if(n%i==0) 12 { 13 su=0; 14 break; 15 } 16 } 17 if(su&&n>1) cout<<"yes"<<endl; 18 else cout<<"no"<<endl; 19 } 20 return 0; 21 }
N的阶乘分数: 2.5
标签
- 数学题
题目描述
输入一个正整数N,输出N的阶乘。
输入格式
正整数N(0<=N<=1000)
输出
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入
0
4
7
样例输出
1
24
5040
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 清华大学研究生复试上机真题
- 这题目有点小纠结
- 自己写的大整数乘法:
-
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 typedef struct { 5 int num[1001]; 6 int length; 7 }BigInt; 8 //大数相加 9 BigInt add(BigInt lon,BigInt sho) 10 { 11 BigInt temp; 12 for(int i=0;i<sho.length;i++) 13 { 14 temp.num[i]=lon.num[i]+sho.num[i]; 15 } 16 for(int i=sho.length;i<lon.length;i++) 17 { 18 temp.num[i]=lon.num[i]; 19 } 20 for(int i=0;i<lon.length-1;i++) 21 { 22 if(temp.num[i]>9) 23 { 24 temp.num[i+1]++; 25 temp.num[i]=temp.num[i]-10; 26 } 27 } 28 if(temp.num[lon.length-1]>9) 29 { 30 temp.num[lon.length]=1; 31 temp.num[lon.length-1]=temp.num[lon.length-1]-10; 32 temp.length=lon.length+1; 33 } 34 else 35 temp.length=lon.length; 36 return temp; 37 } 38 //大数乘小整数 39 BigInt mul(BigInt big,int a) 40 { 41 BigInt temp=big; 42 for(int i=0;i<a-1;i++) 43 temp=add(temp,big); 44 return temp; 45 } 46 int main() 47 { 48 int n; 49 while(cin>>n) 50 { 51 BigInt a; 52 a.length=1; 53 a.num[0]=1; 54 55 for(int i=n;i>=1;i--) 56 { 57 a=mul(a,i); 58 } 59 for(int i=a.length-1;i>=0;i--) 60 { 61 cout<<a.num[i]; 62 } 63 cout<<endl; 64 } 65 return 0; 66 }
- 果断超时了
- 天勤书上面的代码也是超时的==}}
1 #include<iostream> 2 3 #include<string> 4 5 using namespace std; 6 7 8 9 typedef struct { 10 11 int num[1001]; 12 13 int length; 14 15 }BigInt; 16 17 18 19 //大数相乘 20 21 BigInt mul(BigInt lon,BigInt sho) 22 23 { 24 25 BigInt temp; 26 27 temp.length=0; 28 29 for(int m=0;m<sho.length+lon.length+1;m++) 30 31 temp.num[m]=0;//n位数*m位数 所得到的最大位数为n+m;初始化各各位置 32 33 34 35 for(int i=0;i<sho.length;i++) 36 37 for(int j=0;j<lon.length;j++) 38 39 temp.num[i+j]=temp.num[i+j]+lon.num[j]*sho.num[i]; 40 41 42 43 //调整进位 44 45 46 47 while(temp.length<lon.length+sho.length-1||temp.num[temp.length]!=0) 48 49 { 50 51 temp.num[temp.length+1]=temp.num[temp.length+1]+temp.num[temp.length]/10;//如果最后一位没进位,则m+n位为0 52 53 temp.num[temp.length]=temp.num[temp.length]%10; 54 55 temp.length++; 56 57 } 58 59 60 61 return temp; 62 63 } 64 65 66 67 BigInt zhuan(int n)//将int转成大数,倒着存放 68 69 { 70 71 BigInt temp; 72 73 temp.length=0; 74 75 while(n) 76 77 { 78 79 temp.num[temp.length]=n%10; 80 81 n=n/10; 82 83 temp.length++; 84 85 } 86 87 88 89 return temp; 90 91 } 92 93 94 95 int main() 96 97 { 98 99 int n; 100 101 while(cin>>n) 102 103 { 104 105 BigInt a=zhuan(1); 106 107 108 109 for(int i=2;i<=n;i++) 110 111 { 112 113 a=mul(a,zhuan(i)); 114 115 } 116 117 for(int k=a.length-1;k>=0;k--) 118 119 { 120 121 cout<<a.num[k]; 122 123 } 124 125 cout<<endl; 126 127 } 128 129 return 0; 130 131 }
最后,在王道论坛上看到牛人代码:
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 7 { 8 9 int n; 10 11 while (cin>>n) 12 13 { 14 15 int i, j; 16 17 int res[10010]={0}; 18 19 res[0] = 1; 20 21 res[1] = 1; 22 23 for (i = 2; i <= n; i++) 24 25 { 26 27 for (j = 1; j <= res[0]; j++) 28 29 res[j] = res[j] * i; 30 31 32 33 for (j = 1; j <= res[0]; j++) 34 35 { 36 37 if (res[j] >= 10) 38 39 { 40 41 res[j+1] += res[j] / 10; 42 43 res[j] %= 10; 44 45 if (j == res[0]) 46 47 res[0]++; 48 49 } 50 51 } 52 53 } 54 55 for (i = res[0]; i >= 1; i--) 56 57 cout<<res[i]; 58 59 cout<<endl; 60 61 } 62 63 return 0; 64 65 }
数字求和分数: 1
标签
- 简单模拟计算
题目描述
给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少?
输入格式
输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。
输出
可能有多组测试数据,对于每组数据,输出一行,给出一个正整数,是5个数中小于a的数的和。
样例输入
10 1 2 3 4 11
样例输出
10
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 北京大学研究生复试上机真题
-
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int n[5]; 6 int a; 7 while(cin>>a) 8 { 9 for(int i=0;i<5;i++) 10 cin>>n[i]; 11 int sum=0; 12 for(int i=0;i<5;i++) 13 if(n[i]<a) sum=sum+n[i]; 14 cout<<sum<<endl; 15 } 16 return 0; 17 }
A+B分数: 2
标签
- 字符串处理
题目描述
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
输入格式
输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。
输出
请计算A+B的结果,并以正常形式输出,每组数据占一行。
样例输入
-234,567,890 123,456,789
1,234 2,345,678
样例输出
-111111101
2346912
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 浙江大学研究生复试上机真题
-
1 #include <iostream> 2 #include <algorithm> 3 #include<string> 4 #include<sstream> 5 using namespace std; 6 string clear(string s) 7 { 8 for(int i=0;i<s.length();i++) 9 { 10 if(s[i]==',') s=s.substr(0,i)+s.substr(i+1,s.length()-i); 11 } 12 return s; 13 } 14 int main() 15 { 16 string s1,s2; 17 while(cin>>s1) 18 { 19 cin>>s2; 20 s1=clear(s1);s2=clear(s2); 21 stringstream ss1,ss2; 22 long n1,n2,sum; 23 ss1<<s1; 24 ss1>>n1; 25 ss2<<s2; 26 ss2>>n2; 27 sum=n1+n2; 28 cout<<sum<<endl; 29 } 30 return 0; 31 }
数字之和分数: 1.5
标签
- 简单计算
题目描述
对于给定的正整数 n,计算其十进制形式下所有位置数字之和,并计算其平方的各位数字之和。
输入格式
每行输入数据包括一个正整数n(0<n<40000),如果n=0 表示输入结束,并不用计算。
输出
对于每个输入数据,计算其各位数字之和,以及其平方值的数字之和,输出在一行中,之间用一个空格分隔,但行末不要有空格。
样例输入
4
12
97
39999
0
样例输出
4 7
3 9
16 22
39 36
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 吉林大学究生复试上机真题
-
1 #include <iostream> 2 #include <algorithm> 3 #include<string> 4 #include<sstream> 5 using namespace std; 6 int ch[128]={0}; 7 int all(string s) 8 { 9 int sum=0; 10 for(int i=0;i<s.length();i++) 11 { 12 sum=sum+ch[s[i]]; 13 } 14 return sum; 15 } 16 int main() 17 { 18 ch['0']=0;ch['1']=1;ch['2']=2; 19 ch['3']=3;ch['4']=4;ch['5']=5; 20 ch['6']=6;ch['7']=7;ch['8']=8;ch['9']=9; 21 string s; 22 while(getline(cin,s)) 23 { 24 if(s=="0") break; 25 int sum=all(s); 26 cout<<sum<<" "; 27 int temp; 28 stringstream ss1,ss2; 29 ss1<<s; 30 ss1>>temp; 31 temp=temp*temp; 32 ss2<<temp; 33 ss2>>s; 34 sum=all(s); 35 cout<<sum<<endl; 36 } 37 return 0; 38 }
求最大值分数: 1
标签
- 求最大值
题目描述
输入10个数,要求输出其中的最大值。
输入格式
测试数据有多组,每组10个数。
输出
对于每组输入,请输出其最大值(有回车)。
样例输入
10 22 23 152 65 79 85 96 32 1
样例输出
max=152
*** 提示已隐藏,点击上方 [+] 可显示 ***
分类
- 哈尔滨工业大学究生复试上机真题
-
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int main() 5 { 6 int a[10]; 7 while(cin>>a[0]) 8 { 9 10 for(int i=1;i<10;i++) 11 cin>>a[i]; 12 int m=a[0]; 13 for(int i=1;i<10;i++) 14 m=max(a[i],m); 15 cout<<"max="<<m<<endl; 16 } 17 return 0; 18 }