Manchester


私信TA

用户名:wenyajie

访问量:331870

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 65524
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:

已有空瓶子数是否小于一,小于不可换汽水;返回;

已有空瓶子数等于二,可换一瓶;

已有的空瓶子数%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;
}
求教有什么问题?
2019-12-30 08:54:01
#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:08:53
#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%。。。。哭了
2019-11-19 10:44:06
666
2019-09-08 10:15:26
#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%,不知道哪里有问题
2019-07-31 17:33:27
#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;
	}
}

递归就好了 这题比想象中的简单
2019-03-15 16:54:22
#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;
2019-03-02 13:08:02
#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]);
	}
}
2019-02-26 13:22:14