算法题解
vinacky
这个作者很懒,什么都没留下…
展开
-
杭电2000
我用的是冒泡排序发法,其实也就三个数的排列而已#includeusing namespace std;int main(){ char a[4],b; while(cin>>a) { for(int i=3;i>0;i--) { for(int j=0;ji;j++)原创 2013-04-03 23:48:51 · 553 阅读 · 0 评论 -
杭电2004
switch的简单使用#includeusing namespace std;int main(){ int t; while(cin>>t) { if(t>100||t0) cout"Score is error!"endl; else { switch(t/10)原创 2013-04-07 00:19:36 · 446 阅读 · 0 评论 -
杭电2003
#include#includeusing namespace std;int main(){ double a; while(cin>>a) { if(a0) a=-a; coutsetiosflags(ios::fixed)setprecision(2)aendl; }}原创 2013-04-06 23:20:58 · 623 阅读 · 0 评论 -
杭电2006
#includeusing namespace std;int main(){int n;while(cin>>n){int i,a,b=1;for(i=1;i{cin>>a;if(a%2==1)b*=a;}cout}return 0;}原创 2013-04-08 23:41:53 · 477 阅读 · 0 评论 -
杭电2007
a和b要进行排序,然后就简单了#includeusing namespace std;int main(){int a,b;while(cin>>a>>b){int i,sum1=0,sum2=0;if(a>b){i=a;a=b;b=i;}for(i=a;i{if(i%2==0)sum1+=i*i;elsesu原创 2013-04-09 00:13:22 · 498 阅读 · 0 评论 -
杭电2008
水题,注意下if#includeusing namespace std;int main(){int n;while(cin>>n&&n!=0){double a=0,b=0,c=0,s;for(int i=1;i{cin>>s;if(selse if(s==0) b++;else c++;}cout}}原创 2013-04-09 23:43:39 · 456 阅读 · 0 评论 -
杭电2009
#include#include#includeusing namespace std;int main(){double a;int b;while(cin>>a>>b){double sum=0;int i;for(i=1;i{sum+=a;a=sqrt(a);}cout}}原创 2013-04-11 08:22:05 · 660 阅读 · 0 评论 -
杭电2010
只要输出时注意一下最后没有空格就行了#includeusing namespace std;int main(){int x,y;while(cin>>x>>y){int i,n=0;if(x>y){i=x;x=y;y=i;}for(i=x;i{int a,b,c;a=i/100;b=(i-a*100)/10;c=i-原创 2013-04-12 00:46:03 · 522 阅读 · 0 评论 -
杭电2005
题不难,但细节较多,所以。。。不但二月闰年有影响,七八月都是31天,这个也得专门分开讨论,还有就是七八月份开讨论后,加的基数是三到七月的,不能完全复制上面的代码,基数得改~做题还是不能心急呀#include#includeusing namespace std;int main(){ int a,b,c,d; while(scanf("%d/%d/%原创 2013-04-08 00:34:53 · 1147 阅读 · 0 评论 -
杭电2011
注意是1.0.不是1;j=j+2,不能直接写成j+2;#include#includeusing namespace std;int main(){ int m,i,n,j; double sum; cin>>m; for(i=1;im;i++) { sum=0; cin>>n; fo原创 2013-04-15 01:09:30 · 453 阅读 · 0 评论 -
杭电2001
注意看清输入是X1,Y1,X2,Y2,就因为把输入顺序看错了,错了好几次#include#include#includeusing namespace std;int main(){ double x1,x2,y1,y2; while(cin>>x1>>y1>>x2>>y2) { coutsetiosflags(ios::fixed)s原创 2013-04-03 23:41:05 · 480 阅读 · 0 评论 -
杭电2012
#includeusing namespace std;int main(){ bool sushu(int a); int x,y; while(cin>>x>>y&&(x!=0||y!=0)) { int a,i,m=1; for(i=x;iy;i++) { a=i*i+i+41;原创 2013-04-16 00:42:34 · 660 阅读 · 0 评论 -
杭电2002
注意PI是3.1415927#include#include#define PI 3.1415927using namespace std;int main(){ double r,v; while(cin>>r) { v=4.0/3*r*r*r*PI; coutsetiosflags(ios::fixed)setprecisi原创 2013-04-03 23:51:00 · 584 阅读 · 1 评论 -
杭电2013
#includeusing namespace std;int main(){int n;while(cin>>n){int i,sum=1;for(i=1;i{sum=(sum+1)*2;}cout}}原创 2013-04-16 23:54:01 · 481 阅读 · 0 评论 -
杭电2014
注意一下变量的数据类型就行#include#includeusing namespace std;int main(){int n;while(cin>>n){int i,high=0,low=100;double sum=0,grade;for(i=1;i{ cin>>grade; sum+=grade;if原创 2013-04-17 00:04:03 · 472 阅读 · 0 评论 -
杭电2015
利用i(数组位数)每增加一,j(i位置的数)增加2的关系写for循环,使数组角标向前推进的同时数值也可同时表达出来,每次循环将数值加和,每次判断是否有m个数值相加了,加够m个,sum=0,判断i是否到最后一个数,若是则不再输出空格而输出换行。每次循环判断i是否已到最后数值但还未加到m个数,若i=n并且不够m个值相加,就输出当前的平均值。#includeusing namespace原创 2013-04-17 01:07:21 · 546 阅读 · 0 评论 -
杭电2026
#include#includeusing namespace std;int main(){ char a[1000]; while(gets(a)) { int i,l; l=strlen(a);原创 2013-04-26 00:00:03 · 794 阅读 · 0 评论 -
杭电2025
#include#includeusing namespace std;int main(){ string str; while(cin>>str) { char a; a=str[0];原创 2013-04-25 22:02:40 · 567 阅读 · 0 评论 -
杭电2023
就是细心点想清楚每个变量什么意思,应该用什么,m,n总是容易弄混。定义成绩总和要用double;记得把总成绩除以个数,算平均分;最后输出的时候要多加一个空行。 #include#includeusing namespace std;int main(){ int n,m; //n是学生人数,m是课程数原创 2013-04-23 23:11:01 · 597 阅读 · 0 评论 -
杭电2022
绝对值函数 abs(int);fabs(float)。#include#includeusing namespace std;int main(){ int n,m; while(cin>>n>>m) { int grades,max=0,a,b;原创 2013-04-22 00:36:38 · 571 阅读 · 0 评论 -
杭电2017
#include#includeusing namespace std;int main(){ char a[100]; int l,n; cin>>n; for(int i=1;i { cin>>a; l=strlen(a);原创 2013-04-18 01:08:53 · 544 阅读 · 0 评论 -
杭电2016
#includeusing namespace std;int main(){int n;while(cin>>n&&n!=0){int i,a[100],m=0,min; //m一定要初始化为零,不然,如果第一个数是最小数是会出错cin>>a[0];min=a[0];for(i=1;i{cin原创 2013-04-18 00:58:48 · 522 阅读 · 0 评论 -
杭电2018
简单的递归练习,f(n)=f(n-1)+f(n-3)#includeusing namespace std;int main(){int n;int f(int n);while(cin>>n&&n!=0){int a;a=f(n);cout}}int f(int n){ if(n==1) return 1;原创 2013-04-18 13:20:11 · 505 阅读 · 0 评论 -
杭电2019
边输入边查找,找到第一个比m大数时,向前插入m#includeusing namespace std;int main(){ int n,m; while(cin>>n>>m&&(n!=0||m!=0)) { int i; int a[10000]; for(i=0;in;i++) {原创 2013-04-18 13:33:54 · 534 阅读 · 0 评论 -
杭电2024
这个题的输入问题比较多,防止接受n后面的那个回车,!!的那行可以改成while(cin>>n){getchar();}getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.while(sc原创 2013-04-25 01:16:18 · 760 阅读 · 0 评论 -
杭电2027
#include#includeusing namespace std;int main(){ int n,j,a,e,i,o,u; char str[100]; cin>>n; getchar();原创 2013-04-26 20:56:59 · 606 阅读 · 0 评论 -
杭电2020
#include#includeusing namespace std;int main(){ int n; while(cin>>n&&n!=0) { int i,j,a[110],b; for(i=0;i cin>>a[i]原创 2013-04-19 23:50:04 · 545 阅读 · 0 评论 -
杭电2030
汉字占两个字节,机内码小于零。#include#includeusing namespace std;int main(){ int n; cin>>n; getchar(); int i,j,l,sum; for(i=1;i原创 2013-04-29 19:23:50 · 503 阅读 · 0 评论 -
杭电2021
#includeusing namespace std;int main(){ int n; while(cin>>n&&n!=0) { int sum=0,a,teacher; for(int i=1;i原创 2013-04-22 00:15:06 · 655 阅读 · 0 评论 -
杭电2028
求出前两个数的最小公倍数,然后求其与下一个的最小公倍数#includeusing namespace std;int main(){ int beishu(int a,int b); int n; while(cin>>n) { int原创 2013-04-29 00:38:25 · 553 阅读 · 0 评论 -
杭电2029
用两个变量,一个从0开始,一个从字符串最后开始,比较是否相等#include#includeusing namespace std;int main(){int n,i,l,m;char a[100];cin>>n;getchar();for(i=1;i{gets(a);l=strlen(a);int j=0,k=l-1;m=1;fo原创 2013-04-29 00:55:05 · 489 阅读 · 0 评论 -
杭电2032
开始使用递归写的,结果超时了,不想用数组写,用排列组合感觉代码好麻烦,结果看了别人的代码,原来排列组合可以这样写,好巧妙的用了循环#includeusing namespace std;int main(){ int n; while(cin>>n) { int i,j,k;原创 2013-05-01 04:31:15 · 570 阅读 · 0 评论 -
杭电2034
题意很简单,但一开始写就会觉得麻烦,最后大致思路是:先输入数组a,b,对其排序,然后两数组比较,从a 的一个元素开始,每次i++,b数组依次向后判断是否有等于a[i]的元素,若有i++,每次j++直到b[j]>=a[i],进行下一个a[i]······#includeusing namespace std;int main(){ int n,m;原创 2013-05-02 01:16:26 · 589 阅读 · 0 评论 -
杭电2035
#include using namespace std;int main () { int a, b, i, n; while(cin >> a >> b, a!=0&&b!=0) { n = 1; for(int i = 0; i b; i++) { n = (a%1000)原创 2013-05-02 01:32:31 · 535 阅读 · 0 评论 -
杭电2031
1.注意n的正负2.用字符比较方便#includeusing namespace std;int main(){ int n,r; while(cin>>n>>r) { char a[100]; int i=0,m=0;原创 2013-05-01 03:44:13 · 485 阅读 · 0 评论 -
杭电2033
#includeusing namespace std;int main(){ int n,i,a1,a2,a3,b1,b2,b3; cin>>n; for(i=1;i { cin>>a1>>a2>>a3>>b1>>b2>>b3;原创 2013-05-02 00:12:53 · 530 阅读 · 0 评论 -
杭电2048
看别人的代码都看的费劲。。。对于n个人,会有n!种可能的情况为基数。若有n-1个人都没有拿到自己的名字,再来一个人拿着自己的名字,可以和这n-1个人中的任意一个交换手中的名字,于是便可以得到n个人都不拿自己名字的情况。还有一种就是,n-1个人中,n-2个人拿的不是自己的名字,有一个拿的是自己的名字,再来一个人和这一个人互换名字,于是就可以得到n个人都不拿自己名字的情况。用递推就可以实现。原创 2013-05-15 17:59:25 · 500 阅读 · 0 评论 -
杭电2075
水一道。。。#includeusing namespace std;int main(){ int a,b,n; while(cin>>n) { int i; for(i=1;i原创 2013-05-17 00:48:28 · 700 阅读 · 0 评论 -
杭电2036
运用了向量积的知识#include#includeusing namespace std;int main(){ int n; while(cin>>n&&n!=0) { int x[1000],y[原创 2013-05-04 19:43:25 · 433 阅读 · 0 评论 -
杭电2096
再水一道,趁着还没到明天,只能水一道了#includeusing namespace std;int main(){ int t; cin>>t; int i,a,b; for(i=1;i原创 2013-05-19 23:40:59 · 723 阅读 · 0 评论