| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?  
 
输入描述: 
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。 
 
输出描述: 
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。 
 
输入例子1: 
3 
10 
81 
0 
 
输出例子1: 
1 
5 
40 
求问我的程序为什么按两次0回车才出结果 
 
程序如下: 
#include<stdio.h> 
int fun(int n); 
int main(void) 
{ 
    int a[10],b[10]; 
    int i,j,n; 
    j=0; 
    for (i=0;i<10;i++) 
    { 
        scanf("%d\n",&a[i]); 
        j=j+1; 
        if(a[i]==0) 
        break; 
             
    } 
    for(i=0;i<j-1;i++) 
    { 
        n=a[i]; 
        b[i]=fun(n); 
        printf("%d\n",b[i]); 
    } 
     
} 
int fun(int n) 
{ 
    int i,x,y,z; 
    if(n==1||n==0) 
    { 
        z=0; 
    } 
    else if(n==2) 
    { 
        z=1; 
    } 
    else 
    { 
        x=n/3; 
        y=n%3; 
        z=x+fun((x+y)); 
    } 
    return z; 
} 
 
求问我的程序为什么按两次0回车才出结果 
 本帖最后由 major_lyu 于 2020-3-8 19:25 编辑 
scanf里面不要那个“\n”试试 
另外代码问题挺多。你的编译器和编辑器都不报错的么????
 - #include<stdio.h>
 
 - int fun(int n);
 
 - int main(void)
 
 - {
 
 -     int a[10],b[10];
 
 -     int i,j,n;
 
 -     j=0;
 
 -     for (i=0;i<10;i++)
 
 -     {
 
 -         //scanf("%d\n",&a); //a是个数组,a本身就是一个地址表示数组第0号元素的地址。不知道你为什么这么写,如果要把数据放在a的第i个元素可以用scanf("%d", &a[i])或者scanf("%d", a+i); 还有谁告诉你scanf中加一个回车\n的
 
 -         scanf("%d", a+i);
 
 -         j=j+1;
 
 -         //if(a ==0) // 同上,a是个地址,a和0比较没有意义。同样要比较也是a的某个元素与0进行比较
 
 -         if(a[i]==0) 
 
 -         break;
 
 -             
 
 -     }
 
 -     for(i=0;i<j-1;i++)
 
 -     {
 
 -         //n=a;
 
 -         n=a[i];
 
 -         //b=fun(n); // b也是数组,fun函数返回的是一个int, b作为数组的首地址是一个常量,不能被赋值,也就是不能出现在等号的左边。只有b的某个元素b[i]能被赋值
 
 -         b[i]=fun(n);
 
 -         //printf("%d\n",b);//这里也是,b是个地址,你要打印元素应该给出b[i]
 
 -         printf("%d\n",b[i]);
 
 -     }
 
 -    
 
 - }
 
 - int fun(int n)
 
 - {
 
 -     int i,x,y,z;
 
 -     if(n==1||n==0)
 
 -     {
 
 -         z=0;
 
 -     }
 
 -     else if(n==2)
 
 -     {
 
 -         z=1;
 
 -     }
 
 -     else
 
 -     {
 
 -         x=n/3;
 
 -         y=n%3;
 
 -         z=x+fun((x+y));
 
 -     }
 
 -     return z;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |