兑换钱币问题\c语言\

img

img

请问我的代码有什么问题吗,求改正
感觉可能是有什么情况没考虑到
输入100的时候输出跟标准答案不符合.

你的c没清零啊,所以输入100的时候会把之前计算10的加一起了
还有,你的格式也跟要求的不一致啊

#include<stdio.h>
#include <stdlib.h>
#include<math.h>

void comp(int n,int q){
  int b=0,c=0,count=0;
  for(c=n;c>=0;){
      
        for(b=n-c;b>1;){
            
             count++;
             
              // printf("count=%d,c=%d\n",count,c);
             
              b-=2;
             
        }
       
      c-=5;
      count++;

  }
  printf("case %d:%d\n",q,count);
 

}
int main()

{
    int n,q=0,j,k,l,m,f,c=0,i;
    do{
aa:   scanf("%d",&n);
     if(n<0){
      printf("输入错误,请重新输入\n");
      system("pause");
      goto aa;
     }else{
     
     q++;}
     if(n!=0){ comp(n,q);}
    
    
    }while(n!=0);

     return 0;
}

你可以把printf的内容放开,看一下你就明白了

img

在学习的过程中,对于哪一步产生的结果有怀疑就打印出来看看,在实际开发过程中,打印这个函数用的是非常频繁的,这要比打断点方便我认为,不管是什么语言,Java也好,go语言也好,JavaScript也好,都有对应的打印函数,用的都比较多,不要怕麻烦,当你看到那个位置的结果时,你问题就已经解决了一部分

改完还是错了TAT

其实我给你的这个答案我发现还有问题,如果是5的倍数结果没问题,如果不是5的倍数会出错,你想想怎么写小于5时,我也想想,稍微有点儿麻烦

2 2 2 2
2 2 2 2 1 1
2 2 2 1 1 1 1
2 2 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1

1111
2 2
2 11 1

11111
2 111
2 2 1