计蒜客(ACM)5题
来源:互联网 发布:foxmail公司邮箱数据 编辑:程序博客网 时间:2024/06/09 22:02
第1题:简单斐波那契
斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加。用数学公式定义斐波那契数列则可以看成如下形式:
F0=0
F1=1
Fn=Fn-1+Fn-2
我们约定Fn表示斐波那契数列的第n项,你能知道斐波那契数列中的任何一项吗?
输入包括一行,包括一个数字N(0≤N≤50)。
输出包括一行,包括一个数字,为斐波那契数列的第N项的值。
样例输入
7样例输出
13#include<iostream>using namespace std;int main(){int num,i=0;int f0=0,f1=1,result;cin>>num;switch(num){case 0 : result=0; break;case 1: result=1; break;default:for (i=1;i<num;i++){result=f0+f1;f0=f1;f1=result;}break;}cout<<result<<endl;return 0;}int main(){int num,i,flag,j;flag=1;scanf("%d",&num); for (i=2;i<num;i++){if ((num%i) == 0){flag=0;break;} }(flag==1) ? printf("YES\n") : printf("NO\n"); return 0;}其实for (i=2;i<num;i++)改成到num的根号就足够了。假设A*B=num,如果A大于根号num的话,在检查B的
时候,就能检查到A能够整除num。第2题:判断质数
对于大于1的数,如果除了1和它本身,它不能再被其它正整数整除,那么我们说它是一个质数。晓萌想判断一个数是不是质数,希望找你写个程序,帮助她进行判断。
输入包括一行,为一个整数N(1 < N ≤1000),正是晓萌给出你让你判断的数字。
输出包括一行,如果晓萌给出的整数N为质数,那么输出YES;如果N不是质数,那么输出NO。
样例输入
3样例输出
YES#include<stdio.h>int main(){int num,i,flag,j;flag=1;scanf("%d",&num); for (i=2;i<num;i++){if ((num%i) == 0){flag=0;break;} }(flag==1) ? printf("YES\n") : printf("NO\n"); return 0;}
拓展:查找2-N之间的所有质数
之前是检查到num的根号,但是对num开根号会出现精度问题,所以可以用i*i<=num来代替,这样精度的问题解决了,速度也更快。#include<iostream>using namespace std;#define N 1000int main(){int flag[N+1];int i,j;for (i=2;i<=N;i++)flag[i]=1;for (i=2;i*i<=N;i++){if (flag[i]){j=i+1;for (;j<=N;j++){if (j % i == 0)flag[j]=0;}}}j=0;for (i=2;i<=N;i++){if (flag[i]){j++;cout<<" "<<i;if (j % 10 == 0) cout<<endl;}}return 0;}
事实上可以更进一步:质数除了2,3 剩下的符合6n+1和6n+5,这样检查的次数可以更少了。第3题:加一
动态数组存放了一些个位数字(正数),组成一个大数。将这个数加1。
例如:
A = [2,3,1,1,4],
return [2,3,1,1,5]
A = [7,8,9],
return [7,9,0].
格式:
第一行输入一个正整数n,接下来的一行,输入数组A[n](每一位都是正数且为个位数)。
最后输出新的数组。
样例输入
58 9 9 9 9样例输出
9 0 0 0 0#include<stdio.h>#include<stdlib.h>int main(){int num,i;int flag=1;//进位标志 int *array;scanf("%d",&num);array=(int *)malloc(sizeof(int)*(num+1));for (i=1;i<=num;i++)scanf("%d",(array+i));for (i=num;i>0;i--){if (flag) {array[i]+=1;flag=0;}if (array[i]>9){flag=1;array[i]-=10;}else break;}//num input like 999array[0]=flag;for(i=!flag;i<num;i++)printf("%d ",array[i]);printf("%d",array[num]);return 0;}第4题:局部求合
输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。
样例输入
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21样例输出
46891012141516182021#include<iostream>#include <string.h>using namespace std;int main (){int array[21];int flag[21];int i,j,m;for (i=1;i<21;i++){cin>>array[i];flag[i]=1;}for (i=1;i<21;i++){for (j=1;j<21;j++){if (j != i){if (flag[j] == 1 && array[j] % array[i] == 0) flag[j]=0;}}}for (i=1;i<21;i++)if (flag[i] == 0) cout<<array[i]<<endl;return 0;}第5题:泥塑课
小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过250立方厘米的等量橡皮泥,教大家做泥塑。在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥,于是她决定,在正式开始做泥塑前,让大家把手里的橡皮泥都捏成一个立方体,并且测量手里捏好的橡皮泥的长、宽和高。这样,她就可以知道谁被谁抢了橡皮泥了。
小米老师在不同的学期可能会带一个班或者同时带多个班,因此输入数据可能有一组或者多组。每组输入数据的第一行为一个整数n,表示了这个班的小朋友数,之后n行每行包括了由空格分隔的三个整数和一个字符串,那个字符串表示了小朋友的名字,前面三个整数则是这个学生手里橡皮泥块的长、宽、高数据。按照幼儿园的规定,每个班最多有9个小朋友,最少也要有2个小朋友,每个小朋友在学籍系统中的名称不超过8个字符长。当出现一个班级的小朋友数为-1时,表示没有更多的班级了。
输出行数与小米老师带的班级数相同,形式为“X took clay from Y.”,具体请参考样例输出。
样例输入
310 10 2 Jill5 3 10 Will5 5 10 Bill42 4 10 Cam4 3 7 Sam8 11 1 Graham6 2 7 Pam-1样例输出
Bill took clay from Will.Graham took clay from Cam.#include<stdio.h>#include<stdlib.h>typedef struct{int num1;int num2;int num3;char name[10];int all;}Student;int main(){int i,num;int aver=0;char result[2][10];Student *ptr=NULL; scanf("%d",&num);while(1){ptr=(Student *)malloc(sizeof(Student)*num);for (i=0;i<num;i++){scanf("%d %d %d %s",&(ptr+i)->num1,&(ptr+i)->num2,&(ptr+i)->num3,(ptr+i)->name);(ptr+i)->all=(ptr+i)->num1*(ptr+i)->num2*(ptr+i)->num3;aver+=(ptr+i)->all;}aver/=num;for (i=0;i<num;i++){if ((ptr+i)->all > aver) strcpy(result[0],(ptr+i)->name);if ((ptr+i)->all < aver) strcpy(result[1],(ptr+i)->name);}printf("%s took clay from %s.",(result[0]),(result[1]));aver=0; scanf("%d",&num); if (num == -1) break; else printf("\n");}free(ptr); return 0;}
- 计蒜客(ACM)5题
- acm DP经典5题
- ACM初赛试题(5)
- ACM 几何基础(5)
- acm题
- acm题
- ACM-5
- acm (5)
- 50题(ACM学习推荐题)
- 50题(ACM学习推荐题)
- 50题(ACM学习推荐题)
- ACM模拟题讲解(1)-高精度
- ACM做题心得(1)
- ACM模拟题讲解(1)-高精度
- ACM图论500题(先备个份)
- acm第一套题 (4)
- ACM图论500题(先备个份)
- ACM做题心得(补)
- 在选择相册里照片的时候,取消按钮和确定按钮都是英文的,如何改成中文的呢??
- nyoj 303 序号互换
- Ehcache的一个完整例子
- JSP----获取表单参数
- 一些我推荐的和想上的网络课程
- 计蒜客(ACM)5题
- 加入超链接
- T001_UT001_0018
- opencv:边缘检测之kirsch算子
- VMware workstation NAT方式无法连接外网[自己NAT方式的网关设置错误,导致ping www.baidu.com不通]
- 奇数乘法
- 数据结构与算法之排序(1)
- 设计模式
- ORACLE同义词总结