6 商场抽奖

本文探讨了如何使用迭代方法寻找满足特定条件的一等奖(A商品)、二等奖(B商品)和三等奖(C商品)的价格组合,当总价等于给定数值时,代码展示了清晰的循环逻辑。通过调整外层循环变量,简化了搜索过程,提高了效率。
摘要由CSDN通过智能技术生成
#include <stdio.h>   
int main(){  
//二等奖(以下称为B商品)的价格是C商品的 1.5 倍,一等奖(以下称为A商品)是C商品的 2 倍  
//3  6 4 3   1 2 3     23 6  
    int a=0,b=0,c=0,m,n,ajs=0,bjs=0,w=1;  
    scanf("%d%d",&m,&n);  
      
    for(ajs=1;ajs<n;ajs++){  
     for(bjs=1;bjs<n;bjs++){  
         for(;ajs*a+bjs*b+(n-ajs-bjs)*c<m;c++){  
                a=2*c;  
                b=3*c/2;  
                if(ajs*a+bjs*b+(n-ajs-bjs)*c==m&&ajs<bjs&&bjs<n-ajs-bjs)   
                {  
              printf("Price=%d, A=%d, B=%d, C=%d\n",c,ajs,bjs,n-ajs-bjs);  
                break;w=0;  
             }  
          }  
          c=0;a=0;b=0;  
           if(w==0)break;  
     }  
      if(w==0)break;  
 }  
  return 0;  
}  

本题太坑了,商品件数至少一件,并不知道,所以ajs bjs 必须从1开始循环,不能是0。

另外,注意最内侧件数的循环判断,ajs*a+bjs*b+(n-ajs-bjs)*c<m,第一次进入需要给a b初始化,因为a=2*c;   b=3*c/2;  并没有执行。

#include<stdio.h>
int main()
{int M,N,count=0;
int na,nb,nc,pa,pb,pc;
scanf("%d %d",&M,&N);
for(pc=1;;pc++){
for(na=1;na<N;na++){
 for(nb=1;nb<N-na;nb++){nc=N-nb-na;
    if(nb>na&&nc>nb&&nc*pc+pc*3/2*nb+na*2*pc==M){
     count=1;
    break;
   
   }
   if(count==1)break;
   
  }
  if(count==1)break;
 }
 if(count==1)break;
}
printf("Price=%d, A=%d, B=%d, C=%d\n",pc,na,nb,nc);
return 0; 
 } 

 这是室友的思路更清晰的代码,如果把c价格放在最外层循环,一直循环到价格被找到(题目已知一定存在),就能减少许多冗余。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值