【碎碎念】今天开始做第2套的习题
Anton and Danik
问题
安东喜欢下棋,他的朋友丹尼克也喜欢下棋。
一旦他们连续玩了n局。每场比赛都知道谁是赢家——安东还是丹尼尔。没有一场比赛以平局结束。
现在安东想知道,谁赢了更多的比赛,他还是丹尼尔?帮他确定一下。
输入
输入的第一行包含一个整数n(1≤n≤100000)——所玩的游戏数。第二行包含一个字符串s,由n个大写英文字母“a”和“D”组成,代表每场比赛的结果。如果安东赢了第i局,字符串的第i个字符等于'A',如果丹尼尔赢了第i局,字符串的第i个字符等于'D'。
输出
如果Anton比Danik赢了更多的比赛,在输出的唯一一行中打印“Anton”(不带引号)。如果Danik比Anton赢了更多的比赛,在输出的唯一一行中打印“Danik”(不带引号)。
如果Anton和Danik赢得相同数量的游戏,请打印“Friendship”(不带引号)。
思路
我的想法(较潦草)
输入的第一行包含一个整数n(1≤n≤100000)——所玩的游戏数。
错误的想法:
int n[1001];//游戏次数用数组来表示
for(int i=0;i<n;i++)
int n[i]=0;//初始化n
scanf("%d",&n);//在第一行输入n
只是简单的整数,不需要用数组
int n;
scanf("%d",&n);
第二行包含一个字符串s,由n个大写英文字母“a”和“D”组成,代表每场比赛的结果。如果安东赢了第i局,字符串的第i个字符等于'A',如果丹尼尔赢了第i局,字符串的第i个字符等于'D'。
错误的想法:
//第二行包含一个字符串s,由n个大写英文字母“a”和“D”组成,代表每场比赛的结果。如果安东赢了第i局,字符串的第i个字符等于'A',如果丹尼尔赢了第i局,字符串的第i个字符等于'D'。
//设置字符串
char s;
//由n个大写英文字母“a”和“D”组成
//对字符串的设想s=ADAA...
//s+='A';
//字符串添加感觉亦或是数组形式
char s[n];
for(int i=0;i<n;i++){
if(安东赢一局)
s[i]=A;
if(丹尼尔赢一局)
s[i]=D;
}
才看懂这个意思是扫描输入s的意思 ,通过计算s中的A和D的值来判断输赢
//第二行包含一个字符串s,由n个大写英文字母“a”和“D”组成,代表每场比赛的结果。如果安东赢了第i局,字符串的第i个字符等于'A',如果丹尼尔赢了第i局,字符串的第i个字符等于'D'。
//扫描s的值
char s[max_n+1]
scanf("%s",&s);
//设置计数cntA和cntD
int cntA,cntD;
//计算有多少个A和D
for(int i=0;i<n;i++){
if(s[i]=='A')
cntA++;
if(s[i]='D')
cntD++;
}
输出
- 如果Anton比Danik赢了更多的比赛,在输出的唯一一行中打印“Anton”(不带引号)。
- 如果Danik比Anton赢了更多的比赛,在输出的唯一一行中打印“Danik”(不带引号)。
- 如果Anton和Danik赢得相同数量的游戏,请打印“友谊”(不带引号)。
/*输出
如果Anton比Danik赢了更多的比赛,在输出的唯一一行中打印“Anton”(不带引号)。
如果Danik比Anton赢了更多的比赛,在输出的唯一一行中打印“Danik”(不带引号)。
如果Anton和Danik赢得相同数量的游戏,请打印“友谊”(不带引号)。*/
if(cntA>cntD)
printf("Anton\n");
else if(cntD>cntA)
printf("Danik"\n);
else if(cntA=cntD)
printf("友谊\n");
代码
#include<stdio.h>
#include<string.h>
#define MAX_N 100000
int main(){
int n;
scanf("%d",&n) ;
char s[MAX_N+1];
scanf("%s",&s);
int cntA = 0,cntD = 0;//初始化cntA、cntD
for(int i=0;i<n;i++){
if(s[i]=='A')
cntA++;
else if(s[i]=='D')
cntD++;//缺少++
}
if(cntA>cntD)
printf("Anton\n");
else if(cntD>cntA)
printf("Danik\n");
else if(cntA=cntD)
printf("Friendship\n");
return 0;
}
人见人爱A^B
问题
求A^B的最后三位数表示的整数。
说明:A^B的含义是“A的B次方”Input
输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。
Output
对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。
思路
我的潦草思路
求的是 A^B的含义是“A的B次方”
#include<stdio.h>
int main(){
//输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成
//A的B次方=B个A相乘
int A,B;
int res=1;//代表的是B个A相乘的结果 res应该初始化为1
int ans=0;//代表的是结果
scanf("%d %d",&A ,&B);
for(int i=0;i<B;i++){
res=res*A;
printf("%d\n",res);
}
//请输出A^B的最后三位表示的整数,每个输出占一行。
ans=res%1000;
printf("%d\n",ans);
return 0;
}
代码
今天做的两道算法题都有思路 ,嘿嘿(*^▽^*),明天继续学习