第一套(搞定)
#include<stdio.h>
#include<string.h>
int main(){int n;scanf("%d",&n);char s[100];getchar();for(int i=0;i<n;i++){gets(s);int cnta=0,cnte=0,cnti=0,cnto=0,cntu=0;for(int i=0;i<strlen(s);i++){if(s[i]=='a'){cnta++;}else if(s[i]=='e'){cnte++;}else if(s[i]=='i'){cnti++;}else if(s[i]=='o'){cnto++;}else if(s[i]=='u'){cntu++;}}printf("a:%d\n",cnta);printf("e:%d\n",cnte);printf("i:%d\n",cnti);printf("o:%d\n",cnto);printf("u:%d\n",cntu); }return 0;
}
第二套(搞定)
VJ輸入提示Rejected by HDU WAF. Please tweak you code.
代表掃描時未換行,添加\n即可
#include<stdio.h>
#include<string.h>
int main(){int n;char s[10001][20];int cnt[1001];while(scanf("%d\n",&n)&&n!=0){for(int i=0;i<n;i++){scanf("%s\n",s[i]);}for(int i=0;i<n;i++){cnt[i]=0;}for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(strcmp(s[i],s[j])==0)cnt[i]++;}}int max=0;int k;for(int i=0;i<n;i++){if(max<cnt[i]){max=cnt[i];k=i;}}printf("%s\n",s[k]);}return 0;
}
第三套(搞定)
#include<stdio.h>
int main(){int n,m;scanf("%d %d",&n,&m);int dp[10001];for(int i=0;i<=m;i++){dp[i]=0;}for(int i=1;i<=n;i++){int w,d;scanf("%d %d",&d,&w);//位置顛倒了 for(int j=m;j>=w;j--){//條件寫錯了 if(dp[j-w]+d>dp[j]){dp[j]=dp[j-w]+d;}}}printf("%d\n",dp[m]);return 0;
}
第四套(選擇放棄)
#include<stdio.h>
#include<stdlib.h>
typedef struct{int a;int b;int c;
}d;
int cmp(const void*a,const void*b){d*qa=(d*)a;d*qb=(d*)b;return qb->b-qa->b;
}
int main(){int e,f;scanf("%d %d",&e,&f);d*list=(d*)malloc(e*sizeof(d));for(int i=0;i<e;i++){scanf("%d %d",&list[i].b,&list[i].c);list[i].a=i;}qsort(list,e,sizeof(d),cmp);int g=0;int h=0;for(int j=0;j<f;j++){if(list[j].c>g){g=list[j].c;h=list[j].a;}}h=h+1;printf("%d\n",h);free(list);return 0;
}
第五套(搞定)
/*1.讀取死宅數量 n2.每個死宅需要快樂a[i]點3.所有死宅中最大的快樂需求數 ma4.讀取每個死宅需要的快樂點數5.讀取喝快樂水增加的快樂點數k6.特殊情況k==17.二分法計算最短時間 l r m sum(累加額外分數)8.輸出最短時間l
*/
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){int n;scanf("%d",&n);int a[n];int ma=0;//初始化勿忘 for(int i=0;i<n;i++){scanf("%d",&a[i]);ma=max(ma,a[i]);}int k;scanf("%d",&k);if(k==1){printf("%d\n",ma);return 0;}int l=0,r=ma,m;while(r>l) {//一定不要忘記在這個循環條件內運行 m=(l+r)/2;long long sum=0;//long long一定不能省去 for(int i=0;i<n;i++){if(a[i]>m){sum+=(a[i]-m)/(k-1)+((a[i]-m)%(k-1)!=0);//注意是k-1,不是l }}if(sum>m){l=m+1;//是1 ,不是l }else r=m;}printf("%d\n",l);return 0;
}
第六套?(選擇放棄)
#include<stdio.h>#define N 20
int count, n;// 使用更具描述性的參數名
void dfs(int row, int columnMask, int leftDiagonalMask, int rightDiagonalMask) {if (row == n) {count++;return;}// 找到第一個未被占用的位置(列)int availablePositions = ~(columnMask | leftDiagonalMask | rightDiagonalMask) & ((1 << n) - 1);while (availablePositions) {// 選擇最右邊的1,即當前行可放置皇后的列int position = availablePositions & -availablePositions;dfs(row + 1, columnMask | position, (leftDiagonalMask | position) << 1, (rightDiagonalMask | position) >> 1);// 移除已嘗試的位置availablePositions &= ~position;}
}int main() {while (scanf("%d", &n) == 1) {if (n == 0) break;count = 0;dfs(0, 0, 0, 0);printf("%d\n", count);}return 0;
}
?
#include<stdio.h>
#define N 20
int cnt,n;
void dfs(int k,int col,int ld,int rd){if(k>=n){cnt++;return;}else{int pos=((1<<n)-1) & ~(col| ld|rd);while(pos){int p=pos & ~pos;pos-=p;dfs(k+1,col|p,(ld|p)<<1,(rd|p)>>1);}}
}
int main(){while(scanf("%d",&n)==1){if(n==0) break;cnt=0;dfs(0,0,0,0);printf("%d\n",cnt);}return 0;
}
【注意】第四套和第六套之前文章當中寫的代碼有誤,以本篇文章的為主
第四套和第六套實在太難了QAQ,打算放棄了