ACM实训冲刺第七天

【碎碎念】今天开始做第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++;
}

输出

  1. 如果Anton比Danik赢了更多的比赛,在输出的唯一一行中打印“Anton”(不带引号)。
  2. 如果Danik比Anton赢了更多的比赛,在输出的唯一一行中打印“Danik”(不带引号)。
  3. 如果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;
}

代码


今天做的两道算法题都有思路 ,嘿嘿(*^▽^*),明天继续学习

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值