JBTALKS.CC

标题: [C]车费问题 - “本人头脑生锈,逻辑思考功能严重受损。” [打印本页]

作者: ~Kai    时间: 2010-7-21 03:26 PM
标题: [C]车费问题 - “本人头脑生锈,逻辑思考功能严重受损。”
本帖最后由 ~Kai 于 2010-7-21 03:31 PM 编辑

各位大大们大家好,很不好意思又来打扰。
小弟有些疑惑,希望各路高手前来帮忙。

我需要做一个车票的程式,关于价钱的部分令我百思不解...
请看以下:-
车站A ← RM0.80 → 车站B ← RM0.60 → 车站C ← RM1.20 → 车站D ← RM0.90 → 车站E

比如说乘客在车站A要到车站C的话,车费就是RM0.80 + RM0.60;假如乘客要从车站E去到车站A的话,车费就是RM0.90 + RM1.20 + RM0.60 + RM0.80...
请问这一段要怎么写呢?
作者: Super-Tomato    时间: 2010-7-21 03:59 PM
各位大大们大家好,很不好意思又来打扰。
小弟有些疑惑,希望各路高手前来帮忙。

我需要做一个车票的程式,关于价钱的部分令我百思不解...
请看以下:-
车站A ← RM0.80 → 车站B ← RM0.60 → 车站C ← RM1.20 → 车站D ← RM0.90 → 车站E


比如说乘客在车站A要到车站C的话,车费就是RM0.80 + RM0.60;假如乘客要从车站E去到车站A的话,车费就是RM0.90 + RM1.20 + RM0.60 + RM0.80...
请问这一段要怎么写呢?
~Kai 发表于 2010-7-21 03:26 PM



只要你能够写出 A -> C 的逻辑,自然把 E -> A 转换为 A -> E 套用即可
作者: ~Kai    时间: 2010-7-21 04:02 PM
回复 2# Super-Tomato
乘客可以输入从任何车站到任何车站... 头痛在这里...
作者: Super-Tomato    时间: 2010-7-21 04:18 PM
回复  Super-Tomato
乘客可以输入从任何车站到任何车站... 头痛在这里...
~Kai 发表于 2010-7-21 04:02 PM



不就是车站往前或往後做计算而已啊
作者: 宅男-兜着走    时间: 2010-7-21 04:52 PM
各位大大们大家好,很不好意思又来打扰。
小弟有些疑惑,希望各路高手前来帮忙。

我需要做一个车票的程 ...
~Kai 发表于 2010-7-21 03:26 PM


你好, 我有个可行的方式。
一个 Array, 两个变量, 一个"方法(Method, 要不要也可以)" 就能实现。

  1. distancePrice[0] = 0.80; // A 去 B 车程 , 这里我们当成是Index 1
  2. distancePrice[1] = 0.60; // B 去 C 车程 , 这里我们当成是 Index 2
  3. distancePrice[2] = 1.20; // C 去 D 车程, 这里我们当成是Index 3
  4. distancePrice[3] =  0.90; // D 去 E 车程, 这里我们当成是 Index 4
  5. // 以上当成Array的初始。

  6. //接下来的两个变量(var), 我们要记录 A~ C 的车程。
  7. //那么 就会经过 , A -> B , B->C , 根据 Array 的Index 的话, 我们就说是经过 , 1 , 2。
  8. //所以我们来两个变量, int startPoint , int endPoint;
  9. //假设
  10. int startPoint = 1;
  11. int endPont = 2;

  12. //先来个判断, 假设如果 是 C 去 A 的话。 就要把他纠正成 A -> C (感谢TOMATO 提到的Point)
  13. if(startPoint > endPoint)
  14. {
  15. int temp = startPoint; // temp 的意义不大, 只是为了暂时存着 startPoint, 以免在转换的过程中丢失。
  16. sPoint = endPoint;
  17. endPoint = temp;
  18. }

  19. //接下来就来个变量记录 TotalPrice。
  20. double TotalPrice = 0; // 初始话, 我们就把他set 成0, 以免Compiler 篇译不到的危险。

  21. // 这个For 起点是 使用者输入的 startPoint,为了配合 Array Index 是0 开始, 我们就-1, 终点的时候假设是2 我们这里就拿 1 好了,  所以现在我们的循环是 0 , 1

  22. for (int i = startPoint-1; i < endPoint;  i++)
  23.             {
  24.                TotalPrice+= distancePrice[i];
  25.             }


  26. //你的output 是 1.40

  27. //////////////////////////////////////////////////////////////////////////////完整的 Code///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  28.             distancePrice = new double[4];
  29.             distancePrice[0] = 0.80;
  30.             distancePrice[1] = 0.60;
  31.             distancePrice[2] = 1.20;
  32.             distancePrice[3] = 0.90;

  33.             int startPoint = 1;
  34.             int endPoint = 2;

  35.             if (startPoint > endPoint)
  36.             {
  37.                 int temp = startPoint;
  38.                 startPoint = endPoint;
  39.                 endPoint = temp;
  40.             }

  41.             double total = 0;

  42.             for (int i = startPoint-1; i < endPoint; i++)
  43.             {
  44.                 total += distancePrice[i];
  45.             }
复制代码

作者: ~Kai    时间: 2010-7-21 05:07 PM
回复 5# 宅男-兜着走
对啊!为什么我就是没想到这个!
我之前一直在想用算出from和to之间间隔几个站,然后每过一个站就加一个价钱。但不能有效的控制每个站的价钱...
然后又在想用if else (什么&&什么)一个个打出来,但这样如果很多站打到玩的话我会死掉...
谢谢你!
作者: 宅男-兜着走    时间: 2010-7-21 05:21 PM
回复  宅男-兜着走
对啊!为什么我就是没想到这个!
我之前一直在想用算出from和to之间间隔几个站,然后 ...
~Kai 发表于 2010-7-21 05:07 PM


你的方法是可以实现的-rf
只是如果换成是我做的话, Code 会变到非常非常的长==
所以~ 简单就是美!
作者: ~Kai    时间: 2010-7-21 05:43 PM
回复 7# 宅男-兜着走
我用了你的方法,但是有问题...
如果乘客只坐一个站的话,价钱是两个站的。
比如所我要从车站A去车站B,价钱应该是RM0.80,但显示的是RM0.80+RM0.60呢...
作者: 宅男-兜着走    时间: 2010-7-21 05:48 PM
本帖最后由 宅男-兜着走 于 2010-7-21 05:53 PM 编辑
回复  宅男-兜着走
我用了你的方法,但是有问题...
如果乘客只坐一个站的话,价钱是两个站的。
比如所我 ...
~Kai 发表于 2010-7-21 05:43 PM


没啊~ 如果是 A-> B , 那么 车程是  sPoint = 1 , ePoint = 1; 所以价钱是 0.80
A , 是车程 1, B 还是车程1
A-> C 所以是 A->B 车程 1, B-> C 车程2 , 所以sPoint是 1, ePoint 是2
A->D , A->B 车程 1, B->C 车程2 , C->D 车程 3 , 所以是 sPoint 1, ePoint 3.

多一个例子,  B->C , 车程2 , 所以是 sPoint 是 2, ePoint 是 2
作者: ~Kai    时间: 2010-7-21 05:57 PM
本帖最后由 ~Kai 于 2010-7-21 05:59 PM 编辑

回复 9# 宅男-兜着走
  1. for (i = startPoint - 1; i < endPoint; i++)
  2.         {
  3.                 total += distantPrice[i];
  4.         }
复制代码
车站A车站B就是startPoint = 1,endPoint = 2...

我的code是这样
  1. scanf("%d", &start);
  2. scanf("%d", &end);

  3. if (start > end)
  4.         {
  5.                 temp = start;
  6.                 start = end;
  7.                 end = temp;
  8.         }
  9.         for (i = start - 1; i < end; i++)
  10.         {
  11.                 ticket += price[i];
  12.         }
复制代码

作者: 宅男-兜着走    时间: 2010-7-21 06:07 PM
回复  宅男-兜着走 从车站A到车站B就是startPoint = 1,endPoint = 2...

我的code是这样
~Kai 发表于 2010-7-21 05:57 PM


抱歉哦~我的代码你有点误解了。

我的逻辑是, 要使用者输入车程, 不是车站。

我会List个Table 给他们看:

代码           起点           终点                 价钱
------------------------------------------------------------
1           |     A          |       B     |                RM 0.80
2           |     B          |       C    |                RM 0.60
3           |     C         |        D    |                RM 1.20
4           |     D         |        E    |                RM 0.90
-------------------------------------------------------------

所以人家买票是根据 sPoint(起点) ,    ePoint(终点) 为标准。

今天我要从A去 B,   所以我的起点代码是 1, 终点代码是 1
如果明天我要 A 去 C , 所以我的起点代码是 1 , 终点代码是 2

这样明白了吧-rf??
作者: ~Kai    时间: 2010-7-21 06:12 PM
回复 11# 宅男-兜着走
明白,明白。我尝试修改一下...
作者: zechs    时间: 2010-7-22 12:33 AM
我的方法,用datatable。。。
column1 = index *根据车站顺序
column2 = 车站
column3 = 车费

做loop,先从起点站,loop一行车费就加一下,到终点站就exit loop。

这样应该可以加到了。
作者: 宅男-兜着走    时间: 2010-7-22 01:09 AM
本帖最后由 宅男-兜着走 于 2010-7-22 01:10 AM 编辑
我的方法,用datatable。。。
column1 = index *根据车站顺序
column2 = 车站
column3 = 车费

做loop ...
zechs 发表于 2010-7-22 12:33 AM


可是, Datatable C 有吗??如果照你的方式的话, MultiDimention Array 也能实现。
作者: Super-Tomato    时间: 2010-7-22 02:03 AM
本帖最后由 Super-Tomato 于 2010-7-22 02:04 AM 编辑
你好, 我有个可行的方式。
一个 Array, 两个变量, 一个"方法(Method, 要不要也可以)" 就能实现。
宅男-兜着走 发表于 2010-7-21 04:52 PM



不使用第三變數互换變數值小技巧:

startPoint *= endPoint;
endPoint /= startPoint;
startPoint /= endPoint;




我的方法,用datatable。。。
column1 = index *根据车站顺序
column2 = 车站
column3 = 车费

做loop ...
zechs 发表于 2010-7-22 12:33 AM


小计算可以不需要浪费资源,用阵列即可
作者: 宅男-兜着走    时间: 2010-7-22 08:07 AM
不使用第三變數互换變數值小技巧:

startPoint *= endPoint;
endPoint /= startPoint;
startPoi ...
Super-Tomato 发表于 2010-7-22 02:03 AM


哈哈哈哈哈~ 你那个对换的招式强。不过换成String 的变数就没办法了吧。==
不过我的是参考课本的写法,所以我也没想太多,直接Follow了。

不过刚才你的回复给 zech 的, 我觉得他说的不是 Database 的Datatable, 应该是.net 的Datatable

  1. static void Main()
  2.     {
  3.         //
  4.         // Get the DataTable.
  5.         //
  6.         DataTable table = GetTable();
  7.         //
  8.         // Use DataTable here with SQL, etc.
  9.         //
  10.     }

  11.     /// <summary>
  12.     /// This example method generates a DataTable.
  13.     /// </summary>
  14.     static DataTable GetTable()
  15.     {
  16.         //
  17.         // Here we create a DataTable with four columns.
  18.         //
  19.         DataTable table = new DataTable();
  20.         table.Columns.Add("Dosage", typeof(int));
  21.         table.Columns.Add("Drug", typeof(string));
  22.         table.Columns.Add("Patient", typeof(string));
  23.         table.Columns.Add("Date", typeof(DateTime));

  24.         //
  25.         // Here we add five DataRows.
  26.         //
  27.         table.Rows.Add(25, "Indocin", "David", DateTime.Now);
  28.         table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
  29.         table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
  30.         table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
  31.         table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
  32.         return table;
  33.     }
复制代码
原文章 : http://dotnetperls.com/datatable-use
作者: ~Kai    时间: 2010-7-22 09:20 AM
你们说的对我来说太深奥了
我到现在只是会用一点基本的东西而已...
作者: duo8668    时间: 2010-7-22 09:39 AM
可是, Datatable C 有吗??如果照你的方式的话, MultiDimention Array 也能实现。
宅男-兜着走 发表于 2010-7-22 01:09 AM



    C 不会有datatable 吧。。。
Multidimensional array ...似乎有点过头了。。。
作者: Super-Tomato    时间: 2010-7-22 10:39 AM
哈哈哈哈哈~ 你那个对换的招式强。不过换成String 的变数就没办法了吧。==
不过我的是参考课本的写法 ...
宅男-兜着走 发表于 2010-7-22 08:07 AM



當然那个技巧是因为你的题目而寫出來的,而 String 自然也可以用同理做出對調


C 不会有datatable 吧。。。
Multidimensional array ...似乎有点过头了。。。
duo8668 发表于 2010-7-22 09:39 AM


C 没有 datatable 的 class, 但萬變不離其宗,只要掌握好 array 的應用就可以解决很多問題,况且 C/C++ 还有提供 map 和 vector 等的容器庫可以使用
作者: zechs    时间: 2010-7-22 10:59 AM
可是, Datatable C 有吗??如果照你的方式的话, MultiDimention Array 也能实现。
宅男-兜着走 发表于 2010-7-22 01:09 AM


没有=.=,哈哈,不好意思。。。
multidimention array就和datatable差不多了吧=.=
想了下,我不是以a,b,c站名来顺序排列运算,可能会离题拿零分=.=。。。。。。
作者: zechs    时间: 2010-7-22 11:03 AM
回复 16# 宅男-兜着走

.net的datatable。。。蛮占资源的
作者: ~Kai    时间: 2010-7-22 11:33 AM
是我想太多,原来这样就可以了...
一样使用起点和终点控制。
  1. scanf("%d", &start);
  2. scanf("%d", &end);

  3. if (start > end)
  4.         {
  5.                 temp = start;
  6.                 start = end;
  7.                 end = temp;
  8.         }
  9.         for (i = start - 1; i < end - 1; i++)
  10.         {
  11.                 ticket += price[i];
  12.         }
复制代码

作者: shippo    时间: 2010-7-24 09:08 PM
回复 15# Super-Tomato


错了吧。。

a=a*b;
b=a/b;
a=a/b;
作者: 宅男-兜着走    时间: 2010-7-24 10:18 PM
回复  Super-Tomato


错了吧。。

a=a*b;
b=a/b;
a=a/b;
shippo 发表于 2010-7-24 09:08 PM


你的对了。
作者: Super-Tomato    时间: 2010-7-25 12:25 AM
本帖最后由 Super-Tomato 于 2010-7-25 12:28 AM 编辑
回复  Super-Tomato


错了吧。。

a=a*b;
b=a/b;
a=a/b;
shippo 发表于 2010-7-24 09:08 PM


哦,谢谢提醒
startPoint *= endPoint;
endPoint = startPoint / endPoint;
startPoint /= endPoint;
作者: shippo    时间: 2010-7-26 06:35 PM
回复 25# Super-Tomato

其实用加法比较易懂

a=a+b;
b=a-b;
a=a-b;

但是我觉得这种方法没事拿来玩玩考考人还好。
这个坏处是容易打错,而且别人难看懂,code maintanence 更麻烦。
还是用temp比较实际,temp store 的 data 还可以用作其他用途。

btw,good share for beginner.


ps:这个原本是国外的一个题目。
swap the int data store in variable a and b without using a temp/third/ variable or array.
作者: Super-Tomato    时间: 2010-7-26 10:23 PM
回复  Super-Tomato

其实用加法比较易懂

a=a+b;
b=a-b;
a=a-b;

但是我觉得这种方法没事拿来玩玩 ...
shippo 发表于 2010-7-26 06:35 PM


一般上這样作用不大,主要是看如何对變數的掌握或应付刁钻的题目




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5