做题地址:
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"; else cout << "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; }