解题思路:
这可以归结为一个数n的求商和求余的问题。商是能换酒喝的瓶数(设为a),余数是不够换的空瓶数(设为b)。每次换酒后,空瓶数n等于a+b,然后n重新对3求商和求余,并设酒瓶数t对a进行累和。如此循环一直到n=1,2为止。n=1时,不能换酒;n=2时,借1空酒瓶换酒再还回去,n加1后再不能换酒。测试数据有多组,将n用数组元素s[i]表示。
注意事项:
输入数据时由于是按回车键分隔数据,每次回车都要判断是否数据为0。如果是按空格或者其他分隔符则简单点。代码中用了好几次break和循环、判断语句,很不好理清代码结构,需要反复看代码才能明白。
参考代码:
#include <stdio.h>
int main()
{
int s[10],i,a,b,t;//t为能喝到酒的瓶数
for(i=0;i<10;i++){
scanf("%d",&s[i]);
if(0==s[i])
break;
}for(i=0;i<10;i++){
t=0;
if(s[i]==0)
break;
while(s[i]>0){
a=s[i]/3;
b=s[i]%3;
if(s[i]==2){
t+=1;
printf("%d\n",t);
break;
}else if(s[i]==1){
t=t+a;
printf("%d\n",t);
break;
}else{
t=t+a;
s[i]=a+b;
}
}
}return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复