请教C语言问题

nju永远得不到的男人 2018-11-02 04:56:49
在刷PATB1020题目,自己用C语言写了代码,运行结果不对,实在未发现问题出在哪,望各位大佬能够指点一二,感谢!


本人代码:
#include<stdio.h>
struct mooncake{
double store;
double sell;
double price;
}cake[1010];
int main(){
int n;//月饼种类
double D;//市场最大需求量
scanf("%d%lf",&n,&D);
int i;
for(i = 0;i < n;i++){
scanf("%lf",&cake[i].store);//某种月饼库存量
}
for(i = 0;i <n;i++){
scanf("%lf",&cake[i].sell);//某种月饼总售价
cake[i].price = cake[i].sell/cake[i].store;//单价
}
double temp;
if(cake[i].price<cake[i+1].price){//降序排列
temp = cake[i].price;
cake[i].price = cake[i+1].price;
cake[i+1].price = temp;
}
double ans = 0;
for(i = 0;i<n;i++){
if(cake[i].store<=D){
D-=cake[i].store;
ans+=cake[i].sell;
}
else{
ans+=cake[i].price*D;
break;
}
}
printf("%.2f\n",ans);
return 0;
}
...全文
98 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_43573564 2018-11-06
  • 打赏
  • 举报
回复
patb1020是什么?
  • 打赏
  • 举报
回复
感谢以上大佬不吝赐教,谢谢大家!
我排序出错了,还望看到此贴的新手引以为戒。
自信男孩 2018-11-02
  • 打赏
  • 举报
回复
引用 5 楼 weixin_38885956 的回复:
虽然这种问题属于最优解问题,但就这题而言直接比较单价也是可行的。
你在降序的时候犯了个小错误,你没加循环。。。。。

for(int i = 0; i < n; i++)
if(cake[i].price<cake[i+1].price){//降序排列
temp = cake[i].price;
cake[i].price = cake[i+1].price;
cake[i+1].price = temp;

temp = cake[i].sell;
cake[i].sell = cake[i+1].sell;
cake[i+1].sell = temp;

temp = cake[i].store;
cake[i].store = cake[i+1].store;
cake[i+1].store = temp;
}

一层循环能做到降序?我记得需要2层循环吧
自信男孩 2018-11-02
  • 打赏
  • 举报
回复
#include<stdio.h>

struct mooncake {
double store;
double sell;
double price;
}cake[1010];

int main()
{
int n;//月饼种类
int i, j;
double D;//市场最大需求量

scanf("%d%lf",&n,&D);
for(i = 0;i < n;i++){
scanf("%lf", &cake[i].store);//某种月饼库存量
}
for(i = 0;i <n;i++){
scanf("%lf",&cake[i].sell);//某种月饼总售价
cake[i].price = cake[i].sell/cake[i].store;//单价
}
struct mooncake temp;
for (j = 0; j < n; j++)
for (i = 0; i < n - j - 1; i++)
if (cake[i].price < cake[i+1].price){//降序排列
temp = cake[i];
cake[i] = cake[i+1];
cake[i+1] = temp;
}
double ans = 0;
for(i = 0;i<n;i++){
if(cake[i].store<=D){
D-=cake[i].store;
ans+=cake[i].sell;
}
else{
ans+=cake[i].price*D;
break;
}
}
printf("%.2f\n",ans);
return 0;
}


参考一下吧

排序是有问题的
WTomster 2018-11-02
  • 打赏
  • 举报
回复
虽然这种问题属于最优解问题,但就这题而言直接比较单价也是可行的。
你在降序的时候犯了个小错误,你没加循环。。。。。

for(int i = 0; i < n; i++)
if(cake[i].price<cake[i+1].price){//降序排列
temp = cake[i].price;
cake[i].price = cake[i+1].price;
cake[i+1].price = temp;

temp = cake[i].sell;
cake[i].sell = cake[i+1].sell;
cake[i+1].sell = temp;

temp = cake[i].store;
cake[i].store = cake[i+1].store;
cake[i+1].store = temp;
}
yz_555 2018-11-02
  • 打赏
  • 举报
回复
引用 3 楼 yz_555 的回复:
我理解的题目的意思是:将(最大需求量)分成(月饼种类)的份数有多少种分法,并取出其中最赚钱的一种。你的代码里好像没有对价格排序的部分,最后的结果是怎么得出来的?

额。抱歉,我理解错了,只要尽量把最值钱的月饼卖出去就能得到最优解。
yz_555 2018-11-02
  • 打赏
  • 举报
回复
我理解的题目的意思是:将(最大需求量)分成(月饼种类)的份数有多少种分法,并取出其中最赚钱的一种。你的代码里好像没有对价格排序的部分,最后的结果是怎么得出来的?
杀意已决 2018-11-02
  • 打赏
  • 举报
回复
//降序排列
排序没成功
  • 打赏
  • 举报
回复
我的运行结果是错的
C语言课程设计是一个旨在帮助学生深入理解和应用C语言编程的实践项目。以下是一些关于C语言课程设计的基本步骤和建议: 明确目标和需求:首先,你需要与授课教师或课程设计的相关人员沟通,明确课程设计的需求。这包括了解课程设计的主题、目标以及需要解决的问题。这将有助于你确定设计的范围和方向。 选择项目主题:选择一个与C语言相关的项目主题。例如,你可以设计一个学生成绩管理系统、一个简单的文本编辑器或一个游戏等。确保所选主题既具有挑战性又能够展示你的C语言编程技能。 进行问题分析:一旦确定了项目主题,你需要对问题进行深入分析。这包括确定问题的输入和输出、理解问题的要求和限制条件,以及将复杂问题分解为更小的子问题。这将有助于你更好地理解和解决问题。 设计算法和数据结构:针对项目需求,设计合适的算法和数据结构。这包括确定如何存储和处理数据、如何设计函数和模块等。 编写代码:使用C语言编写代码,实现项目功能。注意遵守C语言的语法规则,确保代码的可读性和可维护性。 测试和调试:在编写完代码后,进行测试和调试。确保代码能够正确运行并满足项目需求。使用调试工具和技术来查找和修复代码中的错误。 文档编写:编写项目文档,包括项目说明、功能介绍、代码注释等。这将有助于其他人理解你的项目并复用你的代码。 提交和展示:最后,将你的课程设计项目提交给教师或相关人员,并在课堂上进行展示。展示时可以介绍项目的功能、实现过程以及遇到的挑战和解决方案等。 在进行C语言课程设计时,还需要注意以下几点: 遵守编程规范,包括变量命名、代码缩进、注释等。 充分利用C语言的特点和优势,如指针、结构体、文件操作等。 注重实践和应用,通过解决实际问题来加深对C语言的理解和应用能力。 在遇到困难时,及时向教师或同学请教,并查阅相关资料和文档。 通过以上步骤和建议,你可以完成一个高质量的C语言课程设计项目,并提升自己的编程能力和实践经验。
C语言课程设计是一个旨在帮助学生深入理解和应用C语言编程的实践项目。以下是一些关于C语言课程设计的基本步骤和建议: 明确目标和需求:首先,你需要与授课教师或课程设计的相关人员沟通,明确课程设计的需求。这包括了解课程设计的主题、目标以及需要解决的问题。这将有助于你确定设计的范围和方向。 选择项目主题:选择一个与C语言相关的项目主题。例如,你可以设计一个学生成绩管理系统、一个简单的文本编辑器或一个游戏等。确保所选主题既具有挑战性又能够展示你的C语言编程技能。 进行问题分析:一旦确定了项目主题,你需要对问题进行深入分析。这包括确定问题的输入和输出、理解问题的要求和限制条件,以及将复杂问题分解为更小的子问题。这将有助于你更好地理解和解决问题。 设计算法和数据结构:针对项目需求,设计合适的算法和数据结构。这包括确定如何存储和处理数据、如何设计函数和模块等。 编写代码:使用C语言编写代码,实现项目功能。注意遵守C语言的语法规则,确保代码的可读性和可维护性。 测试和调试:在编写完代码后,进行测试和调试。确保代码能够正确运行并满足项目需求。使用调试工具和技术来查找和修复代码中的错误。 文档编写:编写项目文档,包括项目说明、功能介绍、代码注释等。这将有助于其他人理解你的项目并复用你的代码。 提交和展示:最后,将你的课程设计项目提交给教师或相关人员,并在课堂上进行展示。展示时可以介绍项目的功能、实现过程以及遇到的挑战和解决方案等。 在进行C语言课程设计时,还需要注意以下几点: 遵守编程规范,包括变量命名、代码缩进、注释等。 充分利用C语言的特点和优势,如指针、结构体、文件操作等。 注重实践和应用,通过解决实际问题来加深对C语言的理解和应用能力。 在遇到困难时,及时向教师或同学请教,并查阅相关资料和文档。 通过以上步骤和建议,你可以完成一个高质量的C语言课程设计项目,并提升自己的编程能力和实践经验。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧