做题地址:
http://acm.hdu.edu.cn/diy/contest_login.php?cid=16636
Problem A: HDU1040
排序题,可以直接使用c++提供的排序,如果是JAVA,也可以使用自带的排序方法。C语言需要自己写排序算法。
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int sequence[1005]; int t,n; int main() {while(scanf("%d",&t)==1){while(t--){scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&sequence[i]);sort(sequence,sequence+n);cout<<sequence[0];for(int i=1;i<n;i++)cout<<" "<<sequence[i];cout<<endl;}} }
Problem B: HDU1021
递推
#include <iostream> using namespace std; int main() {int n;while(cin >> n){if(n % 4 == 2)cout << "yes/n";elsecout << "no/n";}return 0; }
Problem C: HDU2010
绝对值排序
#include<stdio.h> #include<math.h> int main() {int n, i, j, a[100], temp;while(scanf("%d",&n)&&n!=0){for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(abs(a[i])<abs(a[j])){temp=a[i];a[i]=a[j];a[j]=temp;}for(i=0;i<n-1;i++)printf("%d ",a[i]);printf("%d/n",a[i]);}return 1; }
Problem D: HDU2010
素数判定
#include<stdio.h> #include<math.h> int fun(int n){int f=1,i,m;m=n*n+n+41;for(i=2;i<=sqrt(m);i++){if(m%i==0){f=0;break;}}return f;}main(){int a,b,j;while(scanf("%d%d",&a,&b)==2,a||b){{int c,d,k;c=a>b?a:b;d=a<b?a:b;for(j=d;j<=c;j++){k=fun(j);if(k==0)break;}printf(k?"OK\n":"Sorry\n");}}}
Problem E: HDU 2037
简单贪心,不断地选取在一段时间内最先结束的节目,直到一天结束。所以对结束时间排序后,直接选择没有重叠的节目即可。
#include<stdio.h> #include<stdlib.h> struct T {int ti_s;int ti_e; }time[100]; int cmp(const void *a,const void *b) {return (*(T *)a).ti_e-(*(T *)b).ti_e; } int main() {int n,i,max,sum,bet;while(scanf("%d",&n),n){max=24;sum=0;for(i=0;i<n;i++) {scanf("%d%d",&time[i].ti_s,&time[i].ti_e);}qsort(time,n,sizeof(time[0]),cmp);if(time[0].ti_e<=max){bet=time[0].ti_e;sum++;max-=(time[0].ti_e-time[0].ti_s); }for(i=0;max>=0&&i<n;i++){if(bet<=time[i].ti_s){bet=time[i].ti_e;sum++;max-=(time[i].ti_e-time[i].ti_s);} }printf("%d\n",sum);}return 0; }
Problem F: hdu 2014
水题,求平均值
#include <stdio.h> int main() {int n, i;float tmp,ans,max,min;while(scanf("%d",&n) != EOF){scanf("%f", &max);min = ans = max;for(i=1; i<n; i++){scanf("%f", &tmp);ans += tmp;if(max < tmp)max = tmp;if(min > tmp)min = tmp;}ans = (ans-max-min)/(n-2);printf("%.2f\n", ans);}return 0; }
Problem G:hdu 1008
简单坐电梯
#include<stdio.h> int main() {int n,t,rt;while(scanf("%d",&n),n){int i=0,sum=0;rt=0;while(i<n){scanf("%d",&t);if(t>rt){sum+=(t-rt)*6+5;}else if(t<rt){sum+=(rt-t)*4+5;} else if(t==rt){sum+=5;}rt=t;i++;}printf("%d\n",sum);}return 0; }
Problem H:hdu 1076
润年计算问题
#include <iostream> using namespace std;int main() {int t,y,n;cin>>t;while(t--){cin>>y>>n;for(int i=0;i<n;){if(y%4==0&&y%100!=0||y%400==0)i++;y++;}cout<<y-1<<endl;}return 1;}