手把手入门+结构体排序+简单递归教学
hdu2019:
#include<bits/stdc++.h> using namespace std; const int maxn=110; int a[maxn]; int main() { int N,x; while(~scanf("%d%d",&N,&x)){ if(N==0&&x==0) break; N++; a[N]=x; for(int i=1;i<N;i++) scanf("%d",&a[i]); sort(a+1,a+N+1); for(int i=1;i<N;i++) printf("%d ",a[i]); printf("%d\n",a[N]); } return 0; }
hdu2020:
#include<bits/stdc++.h> using namespace std; const int maxn=110; int a[maxn]; bool cmp(int w,int v){ return abs(w)>abs(v); } int main() { int N; while(~scanf("%d",&N)){ if(N==0) break; for(int i=1;i<=N;i++) scanf("%d",&a[i]); sort(a+1,a+N+1,cmp); for(int i=1;i<N;i++) printf("%d ",a[i]); printf("%d\n",a[N]); } return 0; }
hdu:1070:
#include<bits/stdc++.h> using namespace std; struct milk{ char name[110]; int p,v; double xjb; }a[110]; int cmp(milk x,milk y) { if(x.xjb!=y.xjb) return x.xjb<y.xjb; return x.v>y.v; } int main() { int n,i,m; scanf("%d",&n); while(n--) { scanf("%d",&m); for(i=0;i<m;i++) { scanf("%s%d%d",a[i].name,&a[i].p,&a[i].v); if(a[i].v>1200) a[i].xjb=1.0*a[i].p/1200; else a[i].xjb=1.0*a[i].p/a[i].v; } sort(a,a+m,cmp); for(i=0;i<m;i++) { if(a[i].v<200) continue; else { printf("%s\n",a[i].name); break; } } } return 0; }
hdu2046:
非递归版本:
#include<bits/stdc++.h> using namespace std; long long dp[110]; int main() { dp[1]=1; dp[2]=2; for(int i=3;i<=50;i++) dp[i]=dp[i-1]+dp[i-2]; int N; while(~scanf("%d",&N)){ printf("%lld\n",dp[N]); } return 0; }
递归版本:
#include<bits/stdc++.h> using namespace std; long long ans,dp[60]; long long get(int x) { if(dp[x]) return dp[x]; if(x==1) return 1; if(x==2) return 2; return dp[x]=get(x-1)+get(x-2); } int main() { int N; while(~scanf("%d",&N)){ ans=get(N); printf("%lld\n",ans); } return 0; }
hdu1241:简单搜索。
#include<bits/stdc++.h> using namespace std; const int maxn=110; char a[maxn][maxn]; int vis[maxn][maxn],N,M,ans; int x[8]={1,1,1,0,0,-1,-1,-1}; int y[8]={1,0,-1,-1,1,1,0,-1}; void dfs(int u,int v){ if(u>N||u<1||v>M||v<1) return ; vis[u][v]=1; for(int i=0;i<8;i++) if(a[u+x[i]][v+y[i]]=='@'&&!vis[u+x[i]][v+y[i]]) dfs(u+x[i],v+y[i]); } int main() { while(~scanf("%d%d",&N,&M)){ if(N==0&&M==0) break; ans=0; memset(vis,0,sizeof(vis)); for(int i=1;i<=N;i++) scanf("%s",a[i]+1); for(int i=1;i<=N;i++){ for(int j=1;j<=M;j++){ if(!vis[i][j]&&a[i][j]=='@'){ ans++; dfs(i,j); } } } printf("%d\n",ans); } return 0; }
hdu2049:
#include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=1000010; int vis[maxn]; ll CC[30][30],DD[30]; ll C(int n,int m) { if(n<0||(n<m)||m<0) return 0; if(CC[n][m]) return CC[n][m]; if(m==0) return 1; return CC[n][m]=C(n-1,m)+C(n-1,m-1); } ll D(int x) { if(D[x]) return D[x]; if(x==2) return 1; if(x==1) return 0; return D[x]=(ll)(x-1)*(D(x-1)+D(x-2)); } int main() { int N,M,T; ll ans; scanf("%d",&T); while(T--){ scanf("%d%d",&N,&M); ans=D(M)*C(N,N-M); printf("%lld\n",ans); } return 0; }
hdu2037:
#include<cstdio> #include<cstdlib> #include<iostream> #include<memory.h> #include<algorithm> using namespace std; struct in { int x,y; }a[110]; bool cmp(in a,in b) { if(a.y==b.y) return a.x>b.x; return a.y<b.y; } int main() { int n,i,j,ans,temp; while(cin>>n){ if(n==0) return 0; for(i=1;i<=n;i++) cin>>a[i].x>>a[i].y; sort(a+1,a+n+1,cmp); ans=1; temp=a[1].y; for(i=2;i<=n;i++){ if(a[i].x>=temp){ ans++; temp=a[i].y; } } cout<<ans<<endl; } return 0; }
It is your time to fight!