网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月25日漏签0天
数据结构吧 关注:104,557贴子:883,611
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 2回复贴,共1页
<<返回数据结构吧
>0< 加载中...

【求教】求大神指点!顾客排队买蛋挞问题!

  • 只看楼主
  • 收藏

  • 回复
  • 不二冰月_妹妹
  • 二叉树
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
假设有N个顾客在排队购买,并假设不会再有新的顾客到来,每个顾客限买M个,并排队依次购买。每次烘培出蛋挞的个数为1个,2个,3个……K个,每次烘完将新的一组蛋挞放入盘中,下一个顾客必须等到下一组蛋挞放入盘中后才能购买。假设每个顾客都想买到全部M个蛋挞,一次没达到M个则重新排到队尾等待下一次购买,一组蛋挞出炉数量达到K个后,下一组又是1个,再2个……顾客买到M个后耶离开队伍,知道N个顾客全买到M个蛋挞为止。根据M,K,N的不同值。输出每个顾客每次的购买情况,并输出所有顾客完成购买的时间顺序。
举个例子:
输入:N=9,K=5;M=7
输出:
首次购买数量 第二次购买 第三次
顾客1 1 5 1
顾客2 2 1 4
顾客3 3 2 2
顾客4 4 3
顾客5 5 2
顾客6 1 6
顾客7 2 2 3
顾客8 3 2 2
顾客9 4 3
购买到M个蛋挞的顾客的顺序为:4,5,6,9,1,2,3,7,8
这是我们算法与数据结构的题目,老师说用队列但是队列我不太熟,感觉无从下手,求哪位大神帮忙指点一下~非常感谢!


  • 不二冰月_妹妹
  • 二叉树
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <stdio.h>
#include <locale.h>
#define MAXV 100
int M,K,N;
int QN;//当前队列中没买到M个蛋挞的人数
int G[MAXV];//第0..N-1个人目前已购买蛋挞数
int D;//本组蛋挞个数
int T;//当前烘培次数
int H;//当前队头位置
int P;//当前盘中蛋挞数
int i,k;
int main()
{
setlocale(LC_ALL,"chs");//中文显示
while (1)
{
printf("Input M,K,N(1..%d):",MAXV);
fflush(stdout);//清楚文件缓冲区
rewind(stdin);//将文件指针绕回文件起始处
if (3==scanf("%d,%d,%d",&M,&K,&N))
{
if ((1<=M && M<=MAXV)&&(1<=K && K<=MAXV)&&(1<=N && N<=MAXV))
{
break;
}
}
}
for (i=0;i<N;i++) G[i]=0;
k=0;
H=0;
T=0;
P=0;
while (1)
{
D=T%K+1;
printf("第%d次烘培%d个蛋挞\n",T+1,D);
P+=D;
printf("盘中有%d个蛋挞\n",P);
while (1)
{
if (G[H]<M)
{
i=M-G[H];//还差i个到M
if (i>=P)
{
G[H]+=P;
printf("第%d个顾客本次买%d个,共买%d个\n",H+1,P,G[H]);
P=0;
if (G[H]>=M)
{
printf("★第%d个顾客完成购买\n",H+1);
k++;
if (k>=N) return 0;
}
H++;
if (H>=N) H=0;
break;
}
else
{
G[H]+=i;
P-=i;
printf("第%d个顾客本次买%d个,共买%d个\n",H+1,i,G[H]);
printf("★第%d个顾客完成购买\n",H+1);
k++;
if (k>=N) return 0;
H++;
if (H>=N) H=0;
}
}
else
{
H++;if (H>=N) H=0;
}
}
T++;
}
return 0;
}
======================================================================
按照题目的例子,当第六个顾客排队第二次时,买的是第五个顾客买了剩下的2个加上新出炉的5个里买去6个,但程序里出来的是第六个顾客买了剩下的2个,第7个顾客买的是新出炉的5个蛋挞里的,求哪位大神帮忙改一下!


2026-03-25 02:22:52
广告
不感兴趣
开通SVIP免广告
  • 窂尐我門の约定
  • 四项式
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
else
{
G[H]+=i;
P-=i;
printf("第%d个顾客本次买%d个,共买%d个\n",H+1,i,G[H]);
printf("★第%d个顾客完成购买\n",H+1);
k++;
if (k>=N) return 0;
H++;
if (H>=N) H=0;
break; //这里少了个break
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 2回复贴,共1页
<<返回数据结构吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示