A 你想加入ACM集訓隊嗎?
#include<stdio.h>
int main()
{
printf("YES\n");
return 0;
}
B 求最大值
利用桶排,計算出現過的每一個字符的個數。最後用一個for循環遍歷所有出現過的字符,求出ascii值與出現次數乘積最大的那一個字符。
#include<stdio.h>
#include<string.h>
int main()
{
int num[1000];
char s[600];
while(scanf("%s",s)!=EOF)
{
int ma=-1,l=strlen(s);
memset(num,0,sizeof(num));
for(int i=0;i<l;i++)
num[s[i]]++;
for(int i=0;i<l;i++)
{
if(num[s[i]]*s[i]>ma)
ma=num[s[i]]*s[i];
}
printf("%d\n",ma);
}
return 0;
}
C 去香港吧
利用結構體存放每一個出現過的字符的:字符、位置、ascii值,然後用sort排序直接排序即可。
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
char c;
int num;
int asc;
}a[10004];
bool cmp(node x,node y)
{
if(x.asc==y.asc)
return x.num<y.num;
return x.asc<y.asc;
}
int main()
{
int t,n;
char s[10004];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
scanf("%s",s);
for(int i=0;i<n;i++)
{
a[i].c=s[i];
a[i].num=i+1;
if(s[i]>='A'&&s[i]<='Z')
a[i].asc=s[i]-'A';
else
a[i].asc=s[i]-'a';
}
sort(a,a+n,cmp);
printf("%d",a[0].num);
for(int i=1;i<n;i++)
printf(" %d",a[i].num);
printf("\n");
}
return 0;
}
D 計算清單
注意,我們要將文件結束前的所有物體的總價全部相加,當文件結束後,輸出答案。
#include<stdio.h>
int main()
{
char s[100];
double a,b,sum=0;
while(scanf("%s %lf %lf",s,&a,&b)!=EOF)
sum+=a*b;
printf("%.1f\n",sum);
return 0;
}
E riba2534的拷問
每一個數字都有他們的特點,找出這個特點,並利用這個特點判斷它的值應該是多少,然後進行a+b,輸出答案即可。
這個代碼是先計算出每一個數字的‘#’有多少個,如果有相同個數的‘#’號,再根據他們的特定的點來判斷他們的值。
每一個數字對應的‘#’號的個數如下:
##### ....# ##### ##### # . . .# ##### ##### ##### ##### ##### . . . . . . . . . .
# . . .# ....# . . . . # . . . . # # . . .# # . . . . # . . . . . . . .# # . . .# # . . .# . . #. . . . . . .
# . . .# ....# . . . . # . . . . # # . . .# # . . . . # . . . . . . . .# # . . .# # . . .# . . #. . . . . . .
# . . .# ....# ##### ##### ##### ##### ##### . . . .# ##### ##### ##### #####
# . . .# ....# # . . . . . . . . # . . . .# . . . .# # . . .# . . . .# # . . .# . . . .# . . #. . . . . . .
# . . .# ....# # . . . . . . . . # . . . .# . . . .# # . . .# . . . .# # . . .# . . . .# . . #. . . . . . .
##### ....# ##### ##### . . . .# ##### ##### . . . .# ##### ##### . . . . . . . . . .
20 7 19 19 14 19 21 11 23 21 9 5
#include<stdio.h>
int main()
{
int t,a,b,sum,flag;
char s[7][20];
scanf("%d",&t);
while(t--)
{
sum=0,flag=0;
for(int i=0; i<7; i++)
scanf("%s",s[i]);
for(int i=0; i<7; i++)
{
for(int j=0; j<5; j++)
{
if(s[i][j]=='#')
sum++;
}
}
if(sum==20)
a=0;
else if(sum==7)
a=1;
else if(sum==19)
{
if(s[1][4]=='#'&&s[4][0]=='#')
a=2;
else if(s[1][4]=='#'&&s[4][4]=='#')
a=3;
else
a=5;
}
else if(sum==14)
a=4;
else if(sum==21)
{
if(s[4][0]=='#')
a=6;
else
a=9;
}
else if(sum==11)
a=7;
else
a=8;
sum=0;
for(int i=0; i<7; i++)
{
for(int j=6; j<11; j++)
if(s[i][j]=='#')
sum++;
}
if(sum==9)
flag=1;
sum=0;
for(int i=0; i<7; i++)
{
for(int j=11; j<17; j++)
if(s[i][j]=='#')
sum++;
}
if(sum==20)
b=0;
else if(sum==7)
b=1;
else if(sum==19)
{
if(s[1][16]=='#'&&s[4][12]=='#')
b=2;
else if(s[1][16]=='#'&&s[4][16]=='#')
b=3;
else
b=5;
}
else if(sum==14)
b=4;
else if(sum==21)
{
if(s[4][12]=='#')
b=6;
else
b=9;
}
else if(sum==11)
b=7;
else
b=8;
if(flag)
printf("%d\n",a+b);
else
printf("%d\n",a-b);
}
return 0;
}
F 二進制加法
從字符串最後面往前面進行計算,然後注意進位問題和前導0問題就行了。
也可以用昨天晚上學長講的大數加法的方法來做,我就是想告訴你們可以這樣做而已。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int ans[1003],la,lb,l,k;
char a[1003],b[1003];
while(~scanf("%s%s",a,b))
{
la=strlen(a);
lb=strlen(b);
l=max(la,lb);
k=0;
memset(ans,0,sizeof(ans));
for(int i=1; i<=l; i++)
{
if(la-i>=0&&lb-i>=0)
ans[l-i]=(a[la-i]-'0')+(b[lb-i]-'0')+k;
else if(la-i<0)
ans[l-i]=(b[lb-i]-'0')+k;
else
ans[l-i]=(a[la-i]-'0')+k;
k=ans[l-i]/2;
ans[l-i]%=2;
}
if(k)
printf("1");
for(int i=0; i<l; i++)
{
if(ans[i]==0&&k==0)
continue;
else
{
printf("%d",ans[i]);
k=1;
}
}
if(k==0)
printf("0\n");
printf("\n");
}
return 0;
}
G 2D蛋糕
直接計算蛋糕的每一種邊和蛋糕的長寬關係,利用這個關係計算每一種邊的個數即可。
具體關係你畫一個圖就知道了。
#include<stdio.h>
#include <iostream>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b;
scanf("%d%d",&a,&b);
if(a>b) swap(a,b);
if(a==1)
{
if(b==1) printf("0 0 0 0 1\n");
else printf("0 0 %d 2 0\n",b-2);
}
else printf("%d %d 4 0 0\n",(a-2)*(b-2),(a-2)*2+(b-2)*2);
}
}
H 九宮格解鎖
將九宮格標記序號:
1 2 3
4 5 6
7 8 9
先用一個二維數組a[10][10],將所有可行的路徑標記爲1:如從1可以到5,那麼我們使a[1][5]=1;
利用for循環將字符串遍歷:如果這個字符到下一個字符是可行的,將這個字符妨礙到的其它的字符標記爲1,例如:本來從1到3爲不可行的,但是我們如果已經使用過2,那麼把a[1][3]=1,a[3][1]=1,標記爲可行。如果着一個字符到下一個字符爲不可行的,直接退出for循環輸出NO。
1、如何判斷兩個字符是否可行?假設第一個字符化爲整數是x,第二個字符化爲整數是y,判斷a[x][y]是否等於1即可。
2、如何退出for循環?用一個flag標記,flag==0表示我們這個for循環運行到字符串結束,flag==1表示我們提前退出for循環。
3、memcpy(a,b,sizeof(a))是什麼意思?讓b數組變成與a數組完全相同的數組。(實在不能理解的話,就把a數組定義在while循環裏面,去掉b數組)。
#include<stdio.h>
#include<string.h>
int t;
char s[10];
int a[10][10],b[10][10]=
{
// 1 2 3 4 5 6 7 8 9
{0,0,0,0,0,0,0,0,0,0},//0
{0,0,1,0,1,1,1,0,1,0},//1
{0,1,0,1,1,1,1,1,0,1},//2
{0,0,1,0,1,1,1,0,1,0},//3
{0,1,1,1,0,1,0,1,1,1},//4
{0,1,1,1,1,0,1,1,1,1},//5
{0,1,1,1,0,1,0,1,1,1},//6
{0,0,1,0,1,1,1,0,1,0},//7
{0,1,0,1,1,1,1,1,0,1},//8
{0,0,1,0,1,1,1,0,1,0}//9
};
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
memcpy(a,b,sizeof(a));
int flag=0,l=strlen(s);
for(int i=0; i<l-1; i++)
{
int x=s[i]-'0';
int y=s[i+1]-'0';
if(a[x][y])
{
if(x==2)
{
a[1][3]=1;
a[3][1]=1;
}
else if(x==4)
{
a[1][7]=1;
a[7][1]=1;
}
else if(x==5)
{
a[1][9]=1;
a[2][8]=1;
a[3][7]=1;
a[4][6]=1;
a[6][4]=1;
a[7][3]=1;
a[8][2]=1;
a[9][1]=1;
}
else if(x==6)
{
a[3][9]=1;
a[9][3]=1;
}
else if(x==8)
{
a[7][9]=1;
a[9][7]=1;
}
else
continue;
}
else
{
flag=1;
break;
}
}
if(flag)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
I 打印田字,超級簡單
找規律的題目。
#include<stdio.h>
#include<string.h>
int main()
{
int n,m;
char a[1003][1003];
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(a,0,sizeof(a));
for(int i=0; i<=n; i++)
{
for(int j=0; j<=m; j++)
a[i][j]=' ';
}
for(int i=0; i<m; i++)
{
a[0][i]='*';
a[n/2][i]='*';
a[n-1][i]='*';
}
for(int i=0; i<n; i++)
{
a[i][0]='*';
a[i][m/2]='*';
a[i][m-1]='*';
}
for(int i=0; i<n; i++)
printf("%s\n",a[i]);
printf("\n");
}
return 0;
}
J 神奇的掛鐘
要知道從11點~12點鐘聲不會敲響,從23點到24點鐘聲也不會敲響。
直接b-a,然後判斷上面的情況出現了幾次,減去這個次數。
#include<stdio.h>
int main()
{
int t,a,b;
scanf("%d",&t);
while(t--)
{
int num=0;
scanf("%d%d",&a,&b);
if(a<12&&b>=12)
num++;
if(b==24)
num++;
printf("%d\n",b-a-num);
}
return 0;
}