解题思路:
已有空瓶子数是否小于一,小于不可换汽水;返回;
已有空瓶子数等于二,可换一瓶;
已有的空瓶子数%3求出剩下的空瓶子;
已有的空瓶子数/3求出可换的汽水数;
把剩下的空瓶子加上换的汽水数作为新的已有的空瓶子数,递归重复执行上述操作;
期间记录换的汽水瓶数即可;
注意事项:
对于新的数据,要把换的瓶数置0;
参考代码:
#include<stdio.h> int M=0; //记录换的瓶数 void huanping(int c); //用于计算换的汽水瓶数 int main() { int n[1000]; // 瓶子数量 int i=0; scanf("%d",&n[0]); while(n[i]!=0) { i++; scanf("%d",&n[i]); } for(int j=0;j<i;j++) { M=0; huanping(n[j]); printf("%d\n",M); } return 0; } void huanping(int c) { if(c<=1) return; if(c==2) { M++;return ; } int c1; M=M+c/3; c1=c/3+c%3; //compute the number of bottle after exchange huanping(c1); return ; }
0.0分
15 人评分
#include <stdio.h> int main() { int a[10], x[10], y ,m=0; scanf("%d", &a[0]); for (int i = 0; i < 10; i++) { if (a[i] >= 1 && a[i] <= 100) { m++; scanf("%d", &a[i + 1]); } else break; } for (int i = 0; i < m; i++) { y = 0; x[i] = a[i]; while (x[i] > 2) { y = y + (x[i] / 3); //饮料数 x[i] = (x[i] / 3) + (x[i] % 3); //瓶盖数 } if (x[i] == 2) y = y + 1; printf("%d\n", y); } return 0; } 求教有什么问题?
#include <stdio.h> int main() { int a[10],i=0,j; scanf("%d",&a[i]); while(a[i]!=0) {i++; scanf("%d",&a[i]); if(i==10) break; } for(j=0;j<i;j++) {if(a[j]>=1&&a[j]<=100) printf("%d\n",a[j]/2); //这里的瓶数整除于2就能得到结果 } return 0; } 其实这个题很简单找规律就行了
二少白禾 2019-12-24 21:11:36 |
如果错的话把刚开始定义数据类型的a[10]为a[100]试试
#include<stdio.h> int bow(int n); int main() { int a[10],i,j; for(i=0;i<10;i++) { scanf("%d",&a[i]); if(a[i]==0) break; } for(j=0;j<i;j++) { if(a[j]>=1&&a[j]<=100) printf("%d\n",bow(a[j])); } return 0; } int bow(int n) { int sum; if((n/3)+(n%3)==2) return 2; else if(n==3) return 1; else if(n<3) return 0; else { sum=n/3; n=sum+n%3; return sum+bow(n); } } 错误50%。。。。哭了
#include <stdio.h> int main(){ int a[11]; int i,N; for(i=0;i<11;i++){ scanf("%d",&a[i]); if(a[i]==0){ N=i; break; } } for(i=0;i<N;i++){ int sum=0; int shang,yushu; do{ shang=a[i]/3; sum+=shang; a[i]=a[i]%3+shang; }while(shang>1); if(a[i]==2)sum++; printf("%d\n",sum); } return 0; } 答案错误50%,不知道哪里有问题
#include <iostream> using namespace std; int function(int n){ if (n==1) return 0; else if (n==2) return 1; else return (n/3)+function(n/3+n%3); } int main(){ int a[10]; int i; for (i=0;i<10;i++){ cin>>a[i]; if (a[i]==0){ break; } } for (int j=0;j<i;j++) { cout<<function(a[j])<<endl; } } 递归就好了 这题比想象中的简单
#include <stdio.h> int main() { int n,sum[50],yushu,sumprint=0; int i,k,j; scanf("%d",&n); while(n!=0) { if(n<=1) { printf("0\n"); } else if(n==2) printf("1\n"); else { for(i=0;;i++) { yushu=n%3; sum[i]=(n-yushu)/3;n=sum[i]+yushu; if(n<=1){ sumprint=0;k=i+1; for(j=0;j<k;j++) sumprint+=sum[j]; printf("%d\n",sumprint); break; } if(n==2) { sumprint=0; sum[i]+=1; k=i+1; for(j=0;j<k;j++) sumprint+=sum[j]; printf("%d\n",sumprint); break;
#include<stdio.h> void main(){ int n,b,c,bb[10],i; for(i=0;i<10;i++){ b=0; scanf("%d",&n); if(n==0){ break; } while(1){ c=(int)(n/3); b+=c; n=c+n%3; if(n<=1){ break; }else if(n==2||n==3){ b++; break; } } bb[i]=b; } for(int j=0;j<i;j++){ printf("%d\n",bb[j]); } }
点我有惊喜!你懂得!浏览:2754 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:488 |
2004年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:716 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:695 |
【计算两点间的距离】 (C语言代码)浏览:927 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:724 |
拆分位数 (C语言代码)浏览:1361 |
P1001 (C语言代码)浏览:836 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:687 |
用筛法求之N内的素数。 (C语言代码)浏览:890 |