蒋师傅亏损问题
蒋师傅亏损问题
问题描述
整个假期宅在家中看数据结构,闲来无事,看到朋友发来的一道数学题:蒋师傅是卖牛肉的,一斤牛肉进价48元。现市场价大甩卖36元一斤。顾客买了两公斤,给了蒋师傅200元假钱,蒋师傅没零钱,于是找邻居换了200元。事后邻居存钱过程中发现钱是假的,被银行没收了,蒋师傅又赔了邻居200,请问蒋师傅一共亏了多少?
于是设计了一个算法来更清晰的展示交易信息
数学模型
实现整个问题的展示,首先想到的是用顺序表数组的数据结构来展示
- 通过FAKE变量来体现假钱在整个过程中的流向
- 邻居在整个过程中收支平衡
- 每一次操作的金额都寄存在数组中
- 展示每次操作的金额变化
计算机实现
亏损求解器整个代码如下:
#include
#include
#define FAKE 0
#define SIZE 10
#define InPrice 48
#define OutPrice 36typedef struct LineList {int money[SIZE];int sum;
};/*初始化*/
int Init(LineList &L) {for (int i = 0; i < SIZE; i++){L.money[i] = 0;}L.sum = 0;return 1;
}/*亏损求解器*/
int main()
{//结果输出sum,采购数量为4,计数器i置零int sum = 0, num = 4, i=0;LineList neighbor, Me;Init(neighbor);Init(Me);//采购牛肉Me.money[i] = -(num * InPrice);i++;//顾客购买支付假钱200Me.money[i] = FAKE;i++;//借邻居200零钱Me.money[i] = 200;neighbor.money[i] = Me.money[i - 1] - Me.money[i];i++;//找钱Me.money[i]=-(200-OutPrice*num);i++;//邻居发现FAKE为假钱neighbor.money[i]=200;Me.money[i] = -200;i++;//总收入for (int j = 0; j < i; j++){Me.sum += Me.money[j];neighbor.sum += neighbor.money[j];}std::cout << "我的净收入:";printf("%d\n", Me.sum);std::cout << "邻居的净收入:";printf("%d\n", neighbor.sum);for (int j = 0; j < i; j++){printf("\n我的第%d次操作:%d", j,Me.money[j]);printf("\t邻居第%d次操作:%d", j, neighbor.money[j]);}
}
最后的结果输出为

结果分析
很多人给出的结果是304,理由是:进货本钱192元,找出去56元,赔偿200元,一共支出448元,减去手中剩下的144元,最终亏损304元
这总思路和我算法中的结果248相差56,造成这样算法的结果无非是一个很常见的逻辑漏洞,将手中剩下的144元视为收入,而加上了这部分钱。应该注意到,这部分钱步算蒋师傅收入,而是一个中间值。归根结底,该算法多计算了144元的收入,而缺少了假钞价值为200元的支出,因而造成了56元的偏差。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
