杭电oj刷题第一阶段答案
文章目录
- 输入输出练习
- 1000 A+B
- 1089 A+B for Input-Output Practice (I)
- 1090 A+B for Input-Output Practice (II)
- 1091 A+B for Input-Output Practice (III)
- 1092 A+B for Input-Output Practice (IV)
- 1093 A+B for Input-Output Practice (V)
- 1094 A+B for Input-Output Practice (VI)
- 1095 A+B for Input-Output Practice (VII)
- 1096 A+B for Input-Output Practice (VIII)
- 1001 Sum Problem
- 简单操作
- 2000 ASCII码排序
- 2001 计算两点间的距离
- 2002 计算球体积
- 2003 求绝对值
- 2004 成绩转换
- 2005 第几天?
- 2006 求奇数的乘积
- 2007 平方和与立方和
- 2008 数值统计
- 2009 求数列的和
- 2010 水仙花数
- 2011 多项式求和
- 2039 三角形
- 英文题试水
- 1720 A+B Coming
- 1062 Text Reverse
- 2104 hide handkerchief
- 1064 Financial Management
- 2734 Quicksum
- 1170 Balloon Comes!
- 1197 Specialized Four-Digit Numbers
- 2629 Identity Card
- 回归水题
- 2012 素数判定
- 2013 蟠桃记
- 2014 青年歌手大奖赛_评委会打分
- 2015 偶数求和
- 2016 数据的交换输出
- 2017 字符串统计
- 2018 母牛的故事
- 2019 数列有序!
- 2020 绝对值排序
- 2021 发工资咯:)
- 2022 海选女主角
- 2023 求平均成绩
- 2024 C语言合法标识符
- 2025 查找最大元素
- 2026 首字母变大写
- 2027 统计元音
- 2028 Lowest Common Multiple Plus
- 2029 Palindromes _easy version
- 2030 汉字统计
- 2032 杨辉三角
- 2040 亲和数
- 2042 不容易系列之二
- 2054 A == B ?
- 2055 An easy problem
- 写在最后
输入输出练习
这里贴上了我自己当时练习杭电oj时的代码和解题思路,必要的题目我会详细的写明需要注意的问题和每一步我的想法
1000 A+B
这道题只要注意EOF的用法就可以了,因为程序中并没有说明有多少数据,EOF可以帮助我们判断是否已经到了末尾。
#include <stdio.h>int main(){int a = 0,b = 0;while(scanf("%d%d",&a,&b)!=EOF)//只要注意这种写法就可以了,在oj里面很常用printf("%d\n",a+b);return 0;
}
1089 A+B for Input-Output Practice (I)
#include <stdio.h>int main(){int a = 0,b = 0;while(scanf("%d%d",&a,&b)!=EOF){printf("%d\n",a+b);}return 0;
}
1090 A+B for Input-Output Practice (II)
#include <stdio.h>int main(){int N;scanf("%d",&N);int a,b;while(N--){scanf("%d%d",&a,&b);printf("%d\n",a+b);}return 0;
}
1091 A+B for Input-Output Practice (III)
#include <stdio.h>int main(){int a = 0,b = 0;while(scanf("%d%d",&a,&b)!=EOF && ((a != 0)||(b != 0))){printf("%d\n",a+b);}return 0;
}
1092 A+B for Input-Output Practice (IV)
#include <stdio.h>int main(){int n = 0,a = 0,sum = 0;while(scanf("%d",&n) != EOF&&(n!=0)){sum = 0;while(n--){scanf("%d",&a);sum += a;}printf("%d\n",sum);}return 0;
}
1093 A+B for Input-Output Practice (V)
#include <stdio.h>int main(){int N = 0;int n = 0;int a = 0;int sum = 0;scanf("%d",&N);while(N--){scanf("%d",&n);sum = 0;while(n--){scanf("%d",&a);sum+=a;}printf("%d\n",sum);}return 0;
}
1094 A+B for Input-Output Practice (VI)
#include <stdio.h>int main(){int n = 0;int a = 0;int sum = 0;while(scanf("%d",&n)!=EOF){sum = 0;while(n--){scanf("%d",&a);sum+=a;}printf("%d\n",sum);}return 0;
}
1095 A+B for Input-Output Practice (VII)
#include<stdio.h>int main(){int a = 0,b = 0;while(scanf("%d%d",&a,&b)!=EOF){printf("%d\n\n",a+b);}return 0;
}
1096 A+B for Input-Output Practice (VIII)
#include <stdio.h>int main(){int N = 0,M = 0;int a = 0,sum = 0;scanf("%d",&N);while(N--){scanf("%d",&M);sum = 0;while(M--){scanf("%d",&a);sum += a;}if(N!=0){//如果不是最后一组数据就输出带一个空行的结果printf("%d\n\n",sum);}else{//是最后一组数据单输出结果即可printf("%d\n",sum);}}return 0;
}
1001 Sum Problem
这个题稍微需要动一下脑子,题目本来的意思是每输入一个数,输出当前已经输入的所有数据的和,我说的动一下脑子指的是如果你有追求效率的心的话,没有那就别管了,我当时做法是避免二重循环效率低,所以打算采用 sum = n * (n + 1) / 2来做,但是很不幸,溢出了,题目只保证了结果会是int类型范围内,但是中间数据可不保证所以你可以采用下面这种做法,也可以换一个思路 sum = n / 2 * (n + 1) 这样就可以了
# include<stdio.h>int main()
{ int n;while(scanf("%d",&n)!=EOF){int sum=0;for(int i=0;i<=n;i++){sum+=i;}printf("%d\n\n",sum);}return 0;
}
简单操作
2000 ASCII码排序
#include<stdio.h>
#include<string.h>
int main(){char a,b,c;while(scanf("%c %c %c",&a,&b,&c)!=EOF){getchar();//接收换行,不然下一次的数据可能会有问题char t;if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%c %c %c\n",a,b,c);}
}
2001 计算两点间的距离
#include <stdio.h>
#include <math.h>//为了使用开根函数int main(){double x1,y1,x2,y2;//首先要注意题目中说明了输入数据会是实数double distance = 0;while(scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)!=EOF){distance = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));printf("%.2lf\n",distance);//注意保留两位小数的写法}return 0;
}
2002 计算球体积
这里只需要注意一下球的体积计算公式就可以了:4πr33\frac{4πr^3}{3}34πr3
#include <stdio.h>
#define PI 3.1415927
int main(){double r;double tiji;//英文学的不好,体积是啥自己查while(scanf("%lf",&r)!=EOF){tiji = 4 * PI * r * r * r / 3.0;//这里为了以防万一我用的3.0来求精度printf("%.3lf\n",tiji);}return 0;
}
2003 求绝对值
#include <stdio.h>int main(){double x;while ((scanf("%lf", &x))!= EOF)printf("%.2f\n", (x > 0) ? x : -x);return 0;
}
2004 成绩转换
#include <stdio.h>int main(){int score;while(scanf("%d",&score)!=EOF){if(score >= 90 && score <= 100){printf("A\n");}else if(score >= 80 && score <= 89){printf("B\n");}else if(score >= 70 && score <= 79){printf("C\n");}else if(score >= 60 && score <= 69){printf("D\n");}else if(score >= 0 && score <= 59){printf("E\n");}else {printf("Score is error!\n");}}return 0;
}
2005 第几天?
这里首先要知道闰年的判断条件:能被4整除并且不能被100整除或者能被400整除
#include <stdio.h>int main(){int day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};int year,month,date;int num = 0;while(scanf("%d/%d/%d",&year,&month,&date)!=EOF){//输入要随机应变num = 0;if((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))){day[1] = 29;}else{day[1] = 28;}for(int i = 0;i < month - 1;i++){//要计算到前一个月num += day[i];}num += date;//加上本月的天数printf("%d\n",num);}return 0;
}
2006 求奇数的乘积
#include <stdio.h>int main(){int n,a,result;while(scanf("%d",&n)!=EOF){result = 1;//因为是成绩所以要用1进行初始化while(n--){scanf("%d",&a);if(a % 2 != 0)result *= a;}printf("%d\n",result);}return 0;
}
2007 平方和与立方和
#include<stdio.h>int main(){int m,n;int x,y;while(scanf("%d%d",&m,&n)!=EOF){x = 0;y = 0;if(m > n){int temp = m;m = n;n = temp;}for(int i = m;i <= n;i++){if(i % 2 == 0){x += i*i;}else{y += i*i*i;}}printf("%d %d\n",x,y);}return 0;
}
2008 数值统计
#include <stdio.h>int main(){int n;double num;int a,b,c;while(scanf("%d",&n)!=EOF && n){a = 0;b = 0;c = 0;while(n--){scanf("%lf",&num);if(num < 0){a++;}else if(num > 0){c++;}else{b++;}}printf("%d %d %d\n",a,b,c);}return 0;
}
2009 求数列的和
#include <stdio.h>
#include <math.h>
int main(){double n;int m;double a[10000] = {0};double sum = 0;while(scanf("%lf%d",&n,&m)!=EOF){sum = 0;for(int i = 0;i < m;i++){if(i == 0){a[i] = n;}else{a[i] = sqrt(a[i-1]);}sum += a[i];}printf("%.2lf\n",sum);}return 0;
}
2010 水仙花数
#include <stdio.h>int main(){int m,n;while(scanf("%d%d",&m,&n)!=EOF){bool flag = false;//来判断是否是第一个数据,由此判断什么时候输出空格for(int i = m;i <= n;i++){int gewei = i%10;//个位上的数int shiwei = i/10%10;//十位上的数int baiwei = i/100%10;//百位上的数int temp = gewei*gewei*gewei+shiwei*shiwei*shiwei+baiwei*baiwei*baiwei;if(i == temp){if(flag == false){//是第一个数据则直接输出printf("%d",i);}else{//不是第一个数据要先输出一个空格再输出结果printf(" %d",i);}flag = true;}}if(flag == false){//没有修改过说明没有水仙花数printf("no\n");}else{printf("\n");}}return 0;
}
2011 多项式求和
#include <stdio.h>
#include <math.h>
int main(){int m;int n;double sum = 0;scanf("%d",&m);while(m--){sum = 0;scanf("%d",&n);for(int i = 1;i <= n;i++){sum += pow(-1.0,(double)(i - 1)) * 1.0 / i;}printf("%.2lf\n",sum);}return 0;
}
2039 三角形
记住三角形的判断条件:两边之和大于第三边
#include <stdio.h>int main(){int M;float A,B,C;scanf("%d",&M);while(M--){scanf("%f%f%f",&A,&B,&C);if(A+B>C&&A+C>B&&B+C>A){printf("YES\n");}else{printf("NO\n");}}return 0;
}
英文题试水
1720 A+B Coming
#include <stdio.h>int main(){int A,B;while(scanf("%x%x",&A,&B)!=EOF){printf("%d\n",A+B);}return 0;
}
1062 Text Reverse
#include <stdio.h>
#include <string.h>
int main(){int T;char temp[1000];scanf("%d",&T);getchar();//接收换行while(T--){gets(temp);int length = strlen(temp);int flag = -1;for(int i =0;i<=length;i++){if(temp[i]==' '||i == length){//遇到空格就进行一次处理,把当前单词反转,同理换行for(int j = i - 1;j >= 0 && j != flag;j--){putchar(temp[j]);}flag = i;if(i!=length) putchar(' ');}}printf("\n");}return 0;
}
2104 hide handkerchief
翻译一下就是:n个人围成一个圈玩找手帕游戏,手帕藏在某一个人的箱子里,Haha来找,每一次他都会跳过m-1个人。问Haha是不是一定能找到手帕。
解析:因为Haha找的次数是无限的,可以永远找下去,所以,只要他能把所有的人都找一遍就一定能找到。但按照他的这种找法,如果n和m不互质的话就会出现某些人是永远不会找。所以看一下 n和m的最大公约数是否等于1就行了。
题目本身不难,难在想法上,看你能不能看出来这是一个互质的问题,采用辗转相除法就可以啦
#include <stdio.h>int check(int n,int m){while(m){int r = n % m;n = m;m = r;}return n;
}int main(){int N,M;while(scanf("%d%d",&N,&M)!=EOF&&N!=-1&&M!=-1){int r = check(N,M);if(r==1){printf("YES\n");}else{printf("POOR Haha\n");}}return 0;
}
1064 Financial Management
#include<stdio.h>int main(){int N = 12;double num = 0;double sum = 0;while(N--){scanf("%lf",&num);sum+=num;}printf("$%.2lf\n",sum/12);return 0;
}
2734 Quicksum
#include <stdio.h>
#include <string.h>int main(){char input[256];gets(input);while(input[0]!='#'){int length = strlen(input);int sum = 0;for(int i = 0;i < length;i++){int distance = input[i] - 64;int value = 0;if(distance >=1 && distance <= 26){value = distance;}sum += (i + 1) * value;}printf("%d\n",sum);gets(input);}return 0;
}
1170 Balloon Comes!
#include <stdio.h>int main(){int T;int A,B;char C;float result;scanf("%d",&T);getchar();while(T--){scanf("%c%d%d",&C,&A,&B);getchar();switch(C){case '+':result = A+B;break;case '-':result = A-B;break;case '*':result = A*B;break;case '/':result = (double)A/B;break;}if(C=='/' && A%B!=0){printf("%.2f\n",result);}else{printf("%d\n",(int)result);}}return 0;
}
1197 Specialized Four-Digit Numbers
#include<iostream>
using namespace std;int main(){int i;int thousand[3],hundred[3],ten[3],num[3],sum[3];for(i=1000;i<10000;i++){thousand[0]=i/1000;hundred[0]=i/100-10*thousand[0];ten[0]=(i%100)/10;num[0]=i%10;thousand[1]=i/1728;hundred[1]=i/144-12*thousand[1];ten[1]=(i%144)/12;num[1]=i%12;thousand[2]=i/4096;hundred[2]=i/256-16*thousand[2];ten[2]=(i%256)/16;num[2]=i%16;sum[0]=thousand[0]+hundred[0]+ten[0]+num[0];sum[1]=thousand[1]+hundred[1]+ten[1]+num[1];sum[2]=thousand[2]+hundred[2]+ten[2]+num[2];if(sum[0]==sum[1]&&sum[0]==sum[2])cout<<i<<endl; } return 0;
}
2629 Identity Card
#include <iostream>
#include<string>using namespace std;int main(void)
{int n;string input_str,place;cin>>n;for(int i=0; i<n; i++){cin>>input_str;if(input_str.substr(0,2)=="33")place="Zhejiang";else if(input_str.substr(0,2)=="11")place="Beijing";else if(input_str.substr(0,2)=="71")place="Taiwan";else if(input_str.substr(0,2)=="81")place="Hong Kong";else if(input_str.substr(0,2)=="82")place="Macao";else if(input_str.substr(0,2)=="54")place="Tibet";else if(input_str.substr(0,2)=="21")place="Liaoning";else if(input_str.substr(0,2)=="31")place="Shanghai";cout <<"He/She is from"<<" "<< place<< ",and his/her birthday is on"<<" "<<input_str.substr(10,2)<<","<<input_str.substr(12,2)<<","<<input_str.substr(6,4)<<" "<<"based on the table."<<endl;}return 0;
}
回归水题
2012 素数判定
#include <iostream>using namespace std;int check_prime_num(int arg)
{if(arg<=0)return 0;else if(arg==1) return 0;else if(arg==2)return 1;else{for(int j=2; j<arg; j++){if(arg%j==0) return 0;}return 1;}
}int main(void)
{int x,y,temp,flag=0;while(cin>>x>>y){if(x==0&&y==0)break;for(int i=x; i<=y; i++){temp=i*i+i+41;if(check_prime_num(temp)==1)++flag;}if(flag==(y-x+1))cout<<"OK"<<endl;else cout<<"Sorry"<<endl;flag=0;}return 0;
}
2013 蟠桃记
我们来简单的想一下,猴子每次吃前一天的一半多一个,那么我们前一天的桃子数量是后一天桃子数量+1的2倍,由此可以写出我们的代码
#include <stdio.h>int main(){int n;while ((scanf("%d",&n))!=EOF){int sum = 1;for (int i = n-1; i != 0; --i){sum = (sum + 1) * 2;}printf("%d\n",sum);}return 0;
}
2014 青年歌手大奖赛_评委会打分
#include <stdio.h>int main(){double result;int n = 0;double score;double max = 0,min = 100;while(scanf("%d",&n)!=EOF){result = 0;max = 0;min = 100;for(int i = 0;i < n;i++){scanf("%lf",&score);result += score;if(score > max){max = score;}if(score < min){min = score;}}result = (double)(result - max - min)/(n - 2);printf("%.2lf\n",result);}return 0;
}
2015 偶数求和
#include<iostream>
#include<cstdio>
using namespace std;int main(){int n, m, i;while(cin >> n >> m){for(i = 1; i + m <= n; i += m){printf("%d ", 2*i + m - 1);}printf("%d\n",n + i);}return 0;
}
2016 数据的交换输出
#include <stdio.h>int main(){int n;int temp[100] = {0};int min = 10000000;int xiabiao = 0;scanf("%d",&n);while(n){min = 10000000;xiabiao = 0; for(int i = 0;i < n;i++){scanf("%d",&temp[i]);if(min > temp[i]){xiabiao = i;min = temp[i];}}if(xiabiao){//交换int t = temp[xiabiao];temp[xiabiao] = temp[0];temp[0] = t;}for(int i = 0;i < n;i++){//输出if(i == 0)printf("%d",temp[i]);elseprintf(" %d",temp[i]);}printf("\n");scanf("%d",&n);}return 0;
}
2017 字符串统计
#include<stdio.h>
#include<string.h>
int main(){int n;scanf("%d",&n);char string[1000];while(n--){scanf("%s",&string);int length=strlen(string);int count=0;for(int i=0;i<length;i++){if(string[i]>='0'&&string[i]<='9'){count++;}}printf("%d\n",count);}return 0;
}
2018 母牛的故事
#include<iostream>
using namespace std;int main(){int n;//yearint a;//一年熟母牛 int b;//两年熟母牛 int c;//三年熟母牛 int d;//全熟母牛 int x;while(cin>>n && n != 0){d = 1;a = b = c = 0;x = 1;for(int i = 0;i < n - 1;i++){d += c; x = d;c = b;b = a;a = x; }cout<<a+b+c+d<<endl;}return 0;
}
2019 数列有序!
#include<stdio.h>
int main(){int n,m;while(~ scanf("%d %d",&n,&m)&&n&&m) {int t[100];for(int i=0; i<n; i++) {scanf("%d",&t[i]);}t[n]=m;int k;for(int i=0; i<=n; i++) {for(int j=0; j<=n-i-1; j++) {if(t[j]>t[j+1]) {k=t[j];t[j]=t[j+1];t[j+1]=k;}}}for(int i=0; i<=n; i++) {if(i==n)printf("%d\n",t[i]);elseprintf("%d ",t[i]);}}return 0;
}
2020 绝对值排序
#include <stdio.h>
#include <math.h>int main(){int n;int num[100] = {0};scanf("%d",&n);while(n){for(int i = 0;i < n;i++){scanf("%d",&num[i]);}for(int k = 0;k < n;k++){for(int j = 0;j < n - k - 1;j++){if(abs(num[j]) < abs(num[j + 1])){int temp = num[j];num[j] = num[j + 1];num[j + 1] = temp;}}}for(int i = 0;i < n;i++){if(i==0)printf("%d",num[i]);elseprintf(" %d",num[i]);}printf("\n");scanf("%d",&n);}return 0;
}
2021 发工资咯:)
#include <stdio.h>int main(){int n;int money,num;int i;scanf("%d",&n);while(n){num = 0;for(i = 0;i < n;i++){scanf("%d",&money);int hundred = money / 100;int wushi = (money-hundred*100)/50;int shi = (money-hundred*100-wushi*50)/10;int wu = (money-hundred*100-wushi*50-shi*10)/5;int er = (money-hundred*100-wushi*50-shi*10-wu*5)/2;int yi = money-hundred*100-wushi*50-shi*10-wu*5-er*2;num += hundred+wushi+shi+wu+er+yi;}printf("%d\n",num);scanf("%d",&n);}return 0;
}
2022 海选女主角
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int main(){int m, n;while (cin >> m >> n && m && n){vector<vector<int> > mm(m);for(int i = 0; i < m; ++ i)mm[i].resize(n);int row, col, maxs;row = col = maxs = 0;for(int i = 0; i < mm.size(); ++ i)for(int j = 0; j < (mm[0].size()); ++ j){cin >> mm[i][j];if(abs(mm[i][j]) > abs(maxs)){maxs = mm[i][j];row = i;col = j;}}mm.clear();cout << row + 1 << ' ' << col + 1 << ' ' << maxs << endl;}return 0;
}
2023 求平均成绩
#include <stdio.h>int main(){int n,m;int a[50][5] = {0};int i,j;int stu_sum[50] = {0};int sub_sum[5] = {0};double sub_avg[5] = {0};int num = 0;;while(scanf("%d%d",&n,&m)!=EOF){num = 0;for(i = 0;i<50;i++){for(j = 0;j < 5;j++){a[i][j] = 0;sub_sum[j] = 0;sub_avg[j] = 0;}stu_sum[i] = 0;}for(i = 0;i < n;i++){for(j = 0;j < m;j++){scanf("%d",&a[i][j]);sub_sum[j] += a[i][j];stu_sum[i] += a[i][j];} }for(j = 0;j < m;j++)sub_avg[j] = (double)sub_sum[j] / n;for(i = 0;i < n;i++){bool flag = true;for(j = 0;j < m;j++){if(a[i][j] < sub_avg[j]){flag = false;break;}}if(i == 0){printf("%.2lf",(double)stu_sum[i] / m);}else{printf(" %.2lf",(double)stu_sum[i] / m);}if(flag)num++;}printf("\n");for(j = 0;j < m;j++){if(j == 0)printf("%.2lf",sub_avg[j]);elseprintf(" %.2lf",sub_avg[j]);}printf("\n");printf("%d\n\n",num);}return 0;
}
2024 C语言合法标识符
#include <stdio.h>
#include <string.h>int main(){int n;char input[50];bool flag;scanf("%d",&n);getchar();while(n--){flag = true;gets(input);int length = strlen(input);for(int i = 0;i < length;i++){if(i == 0){if(input[i]!='_'&&!(input[i]>='a'&&input[i]<='z')&&!(input[i]>='A'&&input[i]<='Z')){flag = false;break;}}else{if(!(input[i]>='a'&&input[i]<='z')&&!(input[i]>='A'&&input[i]<='Z')&&!(input[i]>='0'&&input[i]<='9')&&input[i]!='_'){flag = false;break;}}}if(flag)printf("yes\n");elseprintf("no\n");}return 0;
}
2025 查找最大元素
#include<stdio.h>
#include<string.h>int main(){char c[100];while(scanf("%s",c)!=EOF){char max='A';for(int i=1;i<=strlen(c);i++){if(c[i-1]>=max) max=c[i-1];}for(int i=1;i<=strlen(c);i++){putchar(c[i-1]);if(c[i-1]==max) printf("(max)");}printf("\n");}
}
2026 首字母变大写
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{string str;while(getline(cin,str)){str[0]=(char)(str[0]-'a'+65);for(int i=1;i<str.size();i++){if(str[i]==' ')str[i+1]=(char)(str[i+1]-'a'+65);}cout<<str<<endl;}return 0;
}
2027 统计元音
#include <stdio.h>
#include <string.h>int main(){int n;char input[1000];int num[5];int i;scanf("%d",&n);getchar();while(n--){for(i = 0;i <5;i++)num[i] = 0;gets(input);int length = strlen(input);for(i=0;i<length;i++){if(input[i]>='A'&&input[i]<='Z')input[i] = input[i]+'a'-'A';switch(input[i]){case 'a':num[0]++;break;case 'e':num[1]++;break;case 'i':num[2]++;break;case 'o':num[3]++;break;case 'u':num[4]++;break;default:break;}}if(n)printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n\n",num[0],num[1],num[2],num[3],num[4]);elseprintf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n",num[0],num[1],num[2],num[3],num[4]);}return 0;
}
2028 Lowest Common Multiple Plus
#include <stdio.h>int main() {int n, i;int num[100], n1, n2, temp;while (~scanf("%d", &n)) {for (int j = 0; j < n; j++) {scanf("%d", &num[j]);}for (i = 0; i < n - 1; i++) {n1 = num[i];n2 = num[i + 1];while (n1 % n2 != 0) {temp = n1 % n2;n1 = n2;n2 = temp;}num[i + 1] = num[i] / n2* num[i + 1];}printf("%d\n", num[i]);}return 0;
}
2029 Palindromes _easy version
#include <stdio.h>
#include <string.h>
int main(){int n;scanf("%d\n",&n);char input[1024];bool flag;while(n--){flag = true;gets(input);for(int i = 0;i < strlen(input)/2.0;i++){if(input[i] != input[strlen(input)-1-i]){printf("no\n");flag = false;break;}}if(flag)printf("yes\n");}return 0;
}
2030 汉字统计
这个题我觉得我有必要讲一下,这个题对我来说很新鲜,因为我没处理过汉字的问题,在处理这个问题之前我们需要了解一下汉字机内码在计算机内部的表示方式。
首先我们都知道由于计算机是由美国人发明的,所以ASCII码只能用来存储英文,ASCII只占一个字节,那么后来的汉字怎么用计算机表示呢,这个时候就提出来用两个字节来存储汉字和其他文字,每个字节最高位置1,而计算机中都是用补码来存储的,这就意味着汉字的每一个字节都是负数,所以求汉字的个数其实就是求字符串中小于0的个数有几个再除2即可
#include<stdio.h>
#include<string.h>
int main(){int n,m=0,i,len;char a[10000];scanf("%d",&n);getchar(); //接收换行while(n--){m=0;gets(a); len=strlen(a); for(i=0;i<len;i++){if(a[i]<0)m++;}printf("%d\n",m/2); }return 0;
}
2032 杨辉三角
#include<stdio.h>
#include<string.h>
int main(){int n;while(scanf("%d",&n)!=EOF){int a[100][100]={0};int i=1,j=1,k=0;for(;i<=n;++i){for(j=1;j<=i;++j){if(j==1)a[i][j]=1;else if(j==i){a[i][j]=1;break;}elsea[i][j]=a[i-1][j-1]+a[i-1][j];}}for(i=1;i<=n;++i){for(j=1;j<=i;++j){if(i!=j){printf("%d ",a[i][j]);}else{printf("%d\n",a[i][j]);break;}}}printf("\n");}return 0;
}
2040 亲和数
#include <stdio.h>int main(){int M,A,B;int total;bool flag;scanf("%d",&M);while(M--){total = 1;flag = true;scanf("%d%d",&A,&B);for(int i= 2;i < A;i++){if(A % i == 0)total += i;}if(total != B){printf("NO\n");continue;}else{total = 1;for(int i= 2;i < B;i++){if(B % i == 0)total += i;}if(total != A){printf("NO\n");}else{printf("YES\n");}}}return 0;
}
2042 不容易系列之二
#include <stdio.h>int main(){int N,num,mei;scanf("%d",&N);while(N--){mei = 3;scanf("%d",&num);for(int i = 0;i < num;i++)mei = 2*(mei - 1);printf("%d\n",mei);}return 0;
}
2054 A == B ?
这个题乍一看很简单嘛,其实…坑在于数字的范围没给…所以只能用字串来处理了,然而这就是这个题最烦的地方,难倒是不难,就是烦,烦,烦…
#include <iostream>
#include<string.h>
using namespace std;//对数字进行统一处理,返回数字第一位不为0的位置
int change_char(char *letter,int *len)
{int i=0;int len_var=(*len)-1;//如果是符号,则跳过if(letter[i]=='-'){++i;--(*len);}//去掉前面的0while(letter[i]=='0'&&i<=len_var){--(*len);++i;}//去掉小数点之后最后无效的0,从最后一位算起for(int j=0; j<=len_var; j++){if(letter[j]=='.'){while(letter[len_var]=='0'&&len_var>=0){--(*len);--len_var;}break;}}//如果小数点后面都是无效的0.则去掉小数点if(letter[len_var]=='.')--(*len);return i;
}int main()
{char a[100000],b[100000];int symbol_flag,lenght_a,lenght_b,pos_char_a,pos_char_b,out_flag=1;while(cin>>a>>b){/*当两者符号不一样的时候做一个标志,因为存在-0=0这种情况,所以当符号不一样不能直接下定论两者不相等*/if(a[0]=='-'&&b[0]!='-' || a[0]!='-'&&b[0]=='-')symbol_flag=1;//求出a,b长度lenght_a=strlen(a);lenght_b=strlen(b);//求出第一位不为0的数的位置pos_char_a= change_char(a,&lenght_a);pos_char_b= change_char(b,&lenght_b);//当两者的有效位数不一样直接是不相等,注意下面几个continue的作用if(lenght_a!=lenght_b){cout<<"NO"<<endl;continue;}//以下几个语句都是在lenght_a=lenght_b才执行的if(symbol_flag==1&&lenght_a==0){cout<<"YES"<<endl;continue;}//当符号不一样,且lenght_a或者lenght_b都不为0时候是不相等的if(symbol_flag==1){cout<<"NO"<<endl;continue;}//当符号一样,长度相等执行下面语句,从有效长度起始位置开始判断各位是否相等for(int i=pos_char_a,j=pos_char_b; i<lenght_a; i++,j++){if(a[i]!=b[j]){cout<<"NO"<<endl;out_flag=0;break;}}if(out_flag==1)cout<<"YES"<<endl;//从新初始化out_flag=1;}return 0;
}
2055 An easy problem
#include<iostream>
using namespace std;int main()
{int t; cin >> t;while (t--){char let;int num;cin >> let >> num;int res = 0;if (let <= 'Z' && let >= 'A')res = let - 'A' + 1;else if (let <= 'z' && let >= 'a')res = 'a' - let - 1;cout << res + num << endl;}return 0;
}
写在最后
这都是最基础的题目,据说天津大学机试的题目难度类似于第11页,建议学习一下C++标准库中的一些oj中经常用到的东西,比如:vector,queue,map等等,不需要很深入,但是要了解方法的使用。
如果对于哪一道题想要思路的讲解可以给我评论,我看到了就会及时更改。
PS:没有本人的许可,这篇博客不允许转载
杭电oj刷题第一阶段答案相关推荐
- 杭电oj刷题C语言答案+思路
作为接触C语言不久的新人来说,确实有很多没想到的地方,不少方法是暴力求解,代码量长,方法麻烦,一些题目还是有借鉴大佬的答案,请多谅解.一些题目有我的笔记.如有错误以及更好的见解,请理性讨论.如果对你有 ...
- 杭电oj刷题2022
Problem Description potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口. "做什么比较挣钱呢?筛沙子没力气,看大门又不够帅...& ...
- 记录小白杭电OJ刷题
第一阶段:开始入门吧!(15天,53题) 一.输入输出练习(2天,10题) 1000.1089-1096.1001 二.简单操作:(2-4天,12题) 2000-2011.2039 三.英文题试水(3 ...
- 杭电Oj刷题(2017)
字符串统计 题目描述: 对于给定的一个字符串,统计其中数字字符出现的次数. Input 输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串. O ...
- 杭电Oj刷题(2050)
折线分割平面 题目描述: 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具 ...
- 赛马网ACM试题(原杭电oj ACM)java版答案(1000,10001,1002)
赛马网ACM试题(原杭电OJ ACM试题)答案(java版) Author : Zhang Hailong Date : 2015-09-17 HomePage : http:// E ...
- 地下城夺宝游戏——杭电OJ 1044题解析
题目来源:杭电OJ-1044 题目大意:一个探险家身处一个危险的地下城,城中很危险,并且城中分散着若干个珠宝:现在地下城即将塌陷,冒险家需要在有限的时间内逃出去,但他希望在逃生的过程中获取一些珠宝并使 ...
- 杭电ACM刷题(1):1002,A + B Problem II
最近忙于考试复习,没有多少可供自己安排的时间,所以我利用复习之余的空闲时间去刷刷杭电acm的题目,也当对自己编程能力的锻炼吧. Problem Description I have a very si ...
- 用python爬取杭电oj的数据
暑假集训主要是在杭电oj上面刷题,白天与算法作斗争,晚上望干点自己喜欢的事情! 首先,确定要爬取哪些数据: 如上图所示,题目ID,名称,accepted,submissions,都很有用. 查看源代码 ...
- 杭电oj1620题c语言答案,杭电oj部分水题 c语言源代码.doc
杭电oj部分水题 c语言源代码 殿剐忱酪短祭幂曝沈脸蛀蓑挞姻扶宠秤蓄幌榆矾巨旷于渍弯史影得熄孟椒菊葫彦籍蛛绊趣庙捣载睹答赊索添垛蝎伙生瞎回悟辅篇狱辗歧病氯急迸怜煽跋屋凡逻甲确烧迟卞姻郸被康少辊蒂刽厂礁 ...
最新文章
- 连接centos7桌面方法
- 【初学者指南】在ASP.NET MVC 5中创建GridView
- ajax如何请求json文件,简单的ajax请求加载外部json文件
- python时间序列峰值检测_python – 二维数组中的峰值检测
- Django Localization 之language file
- LeetCode 69. x 的平方根(二分查找)
- 编译原理——实验叁预习报告——基于YACC的TINY语法分析器的构建
- 多台电脑集群运算_答疑 | 三维建模的【电脑】配置问题
- 现代化蔬菜大棚采用什么和计算机自动控制,温室大棚自动控制系统存在的意义以及未来的发展...
- 被忽视的代码审查,往往可以事半功倍?
- Linux和window写python,搭建Python环境(window和linux)
- 【算法】二叉树遍历算法总结:前序中序后序遍历
- git idea提交代码的步骤
- hdjs---后盾网requireJS课程
- redis课程视频 黄建宏_求redis从入门到精通视频教程【50讲全】
- LDO和DCDC电路的概述和区别
- Jim Zemlin:中国是开源最重要的市场
- 基于SWTC公链的融媒体项目入选工信部网络安全示范项目
- 董付国老师6本Python系列教材被北大、复旦等近百所高校选作教材
- html如何让table表格垂直(上下)居中