C_and_CPP 板


LINE

因为有人推文认为我在酸人 我只好一行一行来解释你的 code 有哪些问题 ※ 引述《seedpk5079 (fhcrc 99th ooxx)》之铭言: : #include<stdio.h> : #include<string.h> : #include<stdlib.h> : typedef struct big_number{ : int number; : big_number(){ : int number[50]={}; : } : }; 首先这边让人搞不太清楚你是在写 C 或是在写 C++。 若你要用 C,就不能写 constructor,因为那是 C++ 才有的功能。 若你要用 C++,就别再用旧式的 C 写法,C++ 不需要针对每个 struct 去 typedef。 然後 stdio.h、string.h、stdlib.h 改成 cstdio、cstring、cstdlib 会比较标准。 再来,你的 number 到底是阵列还是单纯的整数? 从你後面的 code 来看,number 应该要宣告成阵列,所以你的定义应该改成: #include <algorithm> struct big_number { int number[50]; big_number() { std::fill(number, number+50, 0); } }; 我们没办法直接用等号来清空阵列的全部元素,所以用 std::fill 来把每个元素 填为 0。这个做法会比用 memset 好一点。 : int b; : struct big_number dp[120]; : struct big_number *w,*e; 像 b、w、e 这类没有意义的名称,绝对不应拿来宣告为全域变数。 : void first(void){/*进行费氏最初2项初始化*/ : dp[0].number[0]=1; : dp[1].number[0]=1; : } : int *t,*tt,ll,*replace,*rr; : int get_number(int *t){ : int v; : for(v=0;t[v]!=0;++v){} : return v; : } : void give(int* replace,int *rr){ : int z; : for(z=0;z<50;++z){ : rr[z]=replace[z]; : } : } 你把 t、tt、ll、replace、rr 都宣告为全域变数, 然而又用相同的名称去宣告函式的参数, 我看不出你这样做的用意何在。 : int * string_reversal(int *tt,int ll){ : int ttt[50]={},tttt=0; : if(tt[ll]==0){ : ll--; : } : for(;ll>=0;ll--){ : ttt[tttt]=tt[ll]; : tttt++; : } : return ttt; : } 这边是个明显的错误,ttt 并非静态变数,它的生命周期在 return 後就会 结束。回传 ttt 将导致未定义的结果 (通常是你的变数内容莫名奇妙被毁)。 : int * add(int *w,int *e){ : int total[50]={},i,j,k,h,m,l=0; : i=get_number(w); : j=get_number(e); : i--;j--; : give(string_reversal(w,i),w); : give(string_reversal(e,j),e); : k=((i>=j)?i:j); : for(m=0;m<=k;++m){ : total[l]=w[m]+e[m]+total[l]; : if(total[l]>=10){ : total[l+1]=total[l]/10; : total[l]=total[l]%10; : } : l++; : } : give(string_reversal(total,l),total); : return total; : } 这边的错误和前面一样,total 是区域变数阵列,你不应该拿来回传。 另外因为你的变数名称几乎都没有意义,我很难看出这段 code 是否有错误。 : int* Fibonacc(int b){ : if(b==1||b==2){ : return dp[0]->number; : } : else if(dp[b].number[0]<10&&dp[b]->number[0]>0){ : return dp[b]->number; : } : else{ : give(add(Fibonacc(b-1),Fibonacc(b-2)),dp[b]->number); : return dp[b]->number; : } : } 这边 return dp[b]->number 是可以的,因为 dp 是全域变数。 但这样做不是好的设计,因为接受端很容易误用得到的记忆体。 : int main(){ : int n; : while(scanf("%d",&n)!=EOF ){ : int day=0,number=0,u,*o,mm[50]={},cc[50]={}; : first(); : mm[0]=9;mm[1]=2;cc[0]=1;cc[1]=9; : o=add(mm,cc); : printf("\n"); : for(u=0;u<50;++u){ : printf("%d",o[u]); : } : } : return 0; : } 最後的问题,程式码最好进行缩排,这样也容易让你一眼就看出程式结构。 上面的 main 经过适当排版後如下: int main(){ int n; while(scanf("%d", &n) != EOF){ int day = 0, number = 0; int mm[50] = {9, 2}; int cc[50] = {1, 9}; first(); int* o = add(mm, cc); printf("\n"); for(int u = 0; u < 50; ++u){ printf("%d", o[u]); } } return 0; } 这样看起来会比较清楚。当然你的程式还是有问题,最主要出在你把区域阵列 直接回传的部份。虽然我可以直接写一个 big_number 的 class 出来让你当正 确答案参考,但这样对你没有帮助。建议你还是再重头念一次你的 C++ 教科书, 了解之前的 code 错在哪里,再继续写这支程式。 : 以上是我写的程式码 : 内容是要把费氏数列做大数跟DP : 可是我现在卡在红色那几行 : 到底要怎麽做才能把结构里的阵列抓出来用啊... : 希望会的人能帮忙解答一下XD --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 124.9.6.2
1F:推 green0924:我收回我之前说的话,l大愿意这样详细地帮忙解说的精神, 04/27 17:43
2F:→ green0924:很值得大家的尊敬~:) 04/27 17:43
3F:推 ledia:基本上, 贴上难以阅读的 code 本身就是一种不礼貌 04/27 17:51
4F:→ ledia:就算我很常帮人看 code 解决问题, 看到这种的还是难以下手 04/27 17:51
5F:推 green0924:倒也不能这样说,毕竟学程式的人,不见得每个都是科班训练 04/27 18:01
6F:→ green0924:出来的,太过苛责,反而显得肚量太小. 04/27 18:02
7F:→ adrianshum:不是科班训练? 这是单纯发问的礼貌, 要科班训练才会有 04/27 18:11
8F:→ adrianshum:礼貌? 这是什麽道理?... 04/27 18:11
9F:推 ledia:贴无法阅读的程式码就跟贴注音文的文章差不了多少 04/27 18:19
10F:推 green0924:楼上的不要硬凹,我不相信你刚学程式时,就用正规的变数命 04/27 18:19
11F:→ ledia:当然如果你阅读注音文无碍, 那我也无话可说 04/27 18:19
12F:→ green0924:名方式,而不会用a b c这些东西. 04/27 18:20
13F:→ ledia:那如果我说是, 你又要怎麽回答呢 04/27 18:20
14F:→ green0924:= = 我要说的是楼楼上,楼上的自动对号入座了. 04/27 18:20
15F:→ adrianshum:很不幸, 我也是. 第一天学写程式, 就有教命名要有意思 04/27 18:22
16F:→ adrianshum:况且, 我说的是礼貌. 问人, 要让别人看得懂你问什麽, 04/27 18:23
17F:推 ledia:不过就算命名取得没意义... 这排版也不会花你很多时间呀 04/27 18:23
18F:→ adrianshum:这是礼貌, 我管你自己写的时候用什麽命名, 但出来发问, 04/27 18:23
19F:推 green0924:那是因为你们是科本出身的,有人告诉你们要用正规命名法. 04/27 18:24
20F:→ adrianshum:就要把你的程式简化整理得别人看得懂, 这就是礼貌 04/27 18:24
21F:推 stonehomelaa:一开始没学到这些 那代表你的书本或老师有问题 04/27 18:24
22F:→ green0924:自己看书学的,很多书上不会特别说明变数要好好命名,况且 04/27 18:24
23F:→ adrianshum:还要硬凹吗? 我就不算是本科出身的, 我读 BBA 的 04/27 18:24
24F:→ vocaloid:烂书还扯那麽多 04/27 18:25
25F:→ green0924:有很多人英文不够好,要他们用英文帮变数命名不太容易 04/27 18:25
26F:→ adrianshum:况且, 把发问的东西写得别人看得明白, 这种基本礼貌 04/27 18:25
27F:→ adrianshum:也要别人教吗? 04/27 18:25
28F:→ green0924:烂书也是学资讯出身的人写出来的烂书啊,你怪读者就不对 04/27 18:26
29F:→ poga:英文不好不能当理由... 04/27 18:26
30F:推 ledia:怪读者就不对 XD 可以转 joke 吗? XDXD 04/27 18:26
31F:→ adrianshum:英文不好, 也至少要有意识, tt t rr ll 这些能用英文差 04/27 18:26
32F:→ ledia:看来我联考考不好只好怪书编得烂了 XD 04/27 18:27
33F:→ adrianshum:做藉口吗?? 别再凹了好不好? 04/27 18:27
34F:推 green0924:写烂书,然後还怪读者自己不懂得变通,读者要是有分辨好坏 04/27 18:30
35F:→ green0924:的能力,我想就不至於选烂书来看了吧? 04/27 18:30
36F:→ vocaloid:所以大家都不要鞭, 继续沉迷在烂书中而不自知 04/27 18:33
37F:→ vocaloid:你是这个意思? 04/27 18:33
38F:推 green0924:我在五楼时已经说得很清楚了,是一堆资讯出身的要高高在 04/27 18:35
39F:→ green0924:上,硬凹自己肚量大. 04/27 18:35
40F:推 ledia:资讯出身不是原罪呀, 我开始写程式也才高中, 还不是自己学 04/27 18:35
41F:→ ledia:虽然那时写 QB, 一样也知道变数名乱取, 隔天自己就看不懂自 04/27 18:36
42F:→ ledia:己到底写的是什麽鬼了 04/27 18:36
43F:→ vocaloid:没人说自己肚量怎样,都直接呛烂书了 04/27 18:37
44F:→ vocaloid:什麽英文不好这也算理由,那注解不会写是不是中文不好阿 04/27 18:37
45F:→ ledia:如果你不是想认真去做一件事, 当然可以处处都马马虎虎 04/27 18:38
46F:→ ledia:如果你是认真想学, 认真想问, 多努力点不会蚀本的 04/27 18:38
47F:→ ledia:好习惯养成不容易, 提早开始总是有帮助的 04/27 18:39
48F:推 green0924:这会又牵拖到认不认真的问题了..╮(╯▽╰")╭ 04/27 18:40
49F:→ green0924:各位有时间在那边酸别人,怎不学学littleshan大那样无私 04/27 18:41
50F:→ green0924:教导新手的精神呢? 04/27 18:41
51F:推 ledia:啊 言尽於此, 要怪我牵托我也无所谓, 反正损失的又不是我 XD 04/27 18:41
52F:→ ledia:你可以搜看看我写过多少篇教学 :) 04/27 18:42
53F:→ green0924:各位要不要乾脆建议板主多加一条板规,滥用变数命名者永 04/27 18:42
54F:→ ledia:而我的贡献算很少的了 04/27 18:42
55F:→ green0924:久水桶呢?这样才於法有据啊~至少人家注音文是板规有说的 04/27 18:43
56F:→ ledia:从头到尾没人说你不能这麽做. 只说这样比较没礼貌而已 04/27 18:43
57F:→ ledia:没礼貌就要永久水桶吗 ? 这还是你提出来的新概念呀 04/27 18:44
58F:→ vocaloid:他算是被你当出来的还在那说嘴,那嘴脸转得实在相当硬 04/27 18:46
59F:→ vocaloid:他原来的推文就已经讲到重点了 04/27 18:46
60F:推 green0924:我想你们的行为已经说明了一切了,滥用变数,看烂书者要被 04/27 18:48
61F:→ green0924:众人酸到死,不是吗? 04/27 18:48
62F:→ vocaloid:不是吧,如果有人po了不当示范还有别人在拥护 04/27 18:49
63F:→ vocaloid:这个板还能正常讨论吗? 04/27 18:50
64F:→ vocaloid:其他像你说的非本科进去一看: "别人也是这样子嘛~" 04/27 18:52
65F:推 green0924:我有没有拥护,看我的推文就会知道,一堆自以为了不起的人 04/27 18:53
66F:→ green0924:在酸人这种行为就不可取~ 04/27 18:53
67F:→ poga:这年头直接讲出问题核心还会被说成酸到死呢 04/27 18:53
68F:→ green0924:这年头见义勇为的人也真难当耶~ 04/27 18:54
69F:→ vocaloid:你就回原篇看你尊敬的littleshan大大的推文哪一点酸好了 04/27 18:54
70F:→ VictorTom:见义勇为, 你做到的充其量是和路人对呛而已.... 04/27 18:55
71F:→ VictorTom:还是有人以为帮原po讲两句话出口气就算帮到忙了(笑XD) 04/27 18:56
72F:→ green0924:不好意思~人家littleshan大就是硬比你有肚量又肯教多了~ 04/27 18:56
73F:→ vocaloid:你不要回避问题,我上面就说我没肚量 04/27 19:00
74F:→ vocaloid:你把你酸的标准讲一下,不然很难讲下去 04/27 19:01
75F:推 Song6Lin:推一个littleshan的耐性。 04/27 19:05
76F:→ adrianshum:明明littleshan 大在原本的推文中, 说得平和中肯, 04/27 19:07
77F:→ adrianshum:有人就要跳出来说 "你干吗酸人", 把同样的论点, 写得 04/27 19:09
78F:→ adrianshum:清清楚楚, 某人又变成说肚量大. 现在答新手非得要像 04/27 19:10
79F:→ adrianshum:教小孩一句一句教才是应分? 答简单一点就是酸? 04/27 19:10
80F:→ adrianshum:看到发问的人有问题, 也不可以严厉的语气告知? 04/27 19:11
81F:→ adrianshum:这什麽世界 04/27 19:11
82F:→ MOONRAKER:还满好笑的 04/27 20:10
83F:→ MOONRAKER:我刚开始学电脑语言的时候的确没有用完整单字来取变数名 04/27 20:10
84F:→ MOONRAKER:不过那是因为电脑只承认变数的前两个字母,画面只有40个 04/27 20:13
85F:→ MOONRAKER:字宽度,不能续行,修改要打行号 04/27 20:14
86F:→ MOONRAKER:g先生先嫌本科系的人都高高在上,掰不下去了就改口骂书 04/27 20:15
87F:→ MOONRAKER:烂,认为别人都不照他的主题在讨论,却一个烂书例子都吐 04/27 20:16
88F:→ MOONRAKER:不出来,实在是非常幽默! 04/27 20:16
89F:推 green0924:楼上的没看清楚就乱吐可笑极了,是谁先嫌书烂,请看清楚再 04/27 20:19
90F:→ green0924:发言吧~ 04/27 20:19
91F:→ green0924:我想说的还是我在5F时说的那些,吐再多只嫌你们肚量很差. 04/27 20:20
92F:→ green0924:可惜了littleshan这篇好文被你们的推文弄成战文. 04/27 20:21
93F:推 green0924:对我个人有意见,欢迎用合法或非法手段来找我,总之,我就 04/27 20:29
94F:→ green0924:是看不惯有一群人对程式新手那样不友善的态度,不愿意帮 04/27 20:30
95F:→ green0924:忙回答问题就算了,也请不要酸别人,任何人都有新手的时候 04/27 20:30
96F:推 Peruheru:战的最多不就是你吗...大家都讲一样的事情,有没有专门发 04/27 20:30
97F:→ Peruheru:表一篇说明文章就会造成被你战的差异... 04/27 20:31
98F:→ Peruheru:不管是不是本科系出身,你为何非得看成那是酸文? 04/27 20:31
99F:推 saxontai:绿九二四兄要不要按 a 查查 ledia 跟 adrianshum 热心回 04/27 20:32
100F:→ saxontai:答过多少问题呀?而您绿九二四兄又回答过多少问题了呀? 04/27 20:32
101F:→ saxontai:ledia 兄热心到会图文并茂咧!(  ̄ c ̄)y▂ξ 04/27 20:34
102F:推 green0924:笑话~以前做好事,那我很钦佩,但不代表以後还是会做好事. 04/27 20:35
103F:→ green0924:至少在这一篇文我没有看到有任何建设性的回覆原po的部份 04/27 20:35
104F:推 Peruheru:自打嘴巴.... 04/27 20:36
105F:→ green0924:只看到无意义的酸原po而已.人家littleshan至少很认真的 04/27 20:36
106F:→ green0924:回答问题所在,而不是只会嘲弄别人写的程式不好看. 04/27 20:37
107F:推 saxontai:那 green0924 您的建设性回覆在哪呢?(笑) 04/27 20:37
108F:→ Peruheru:所以说你为何非得要认为那「无意义」又是「酸」?很主观呢 04/27 20:37
109F:→ green0924:喔~那你呢?自打嘴巴~ 04/27 20:38
110F:推 green0924:我没有帮回答,因为我没有那麽像littleshan那麽热心,可至 04/27 20:40
111F:→ green0924:少我不会去嘲笑新手!! 04/27 20:40
112F:→ vocaloid:基本上大家都在笑你 04/27 20:41
113F:→ Peruheru:就跟你说了,或许根本只有你一人认为那是嘲笑 04/27 20:42
114F:→ Peruheru:其他人认为那是「建议」 04/27 20:42
115F:→ Peruheru:有提出具体不正确之处,而不是「烂死了,学什麽程式」这 04/27 20:43
116F:推 green0924:喔~是啊~就群众暴力嘛~你们这些人就这样,只会笑别人而已 04/27 20:43
117F:→ Peruheru:种嘲笑的没建设性发言 04/27 20:43
118F:→ Peruheru:你自己想想看为啥从头到尾都是你一人在支持嘲笑说好了 04/27 20:44
119F:→ Peruheru:群众暴力也出来了...不是跟你说不要把那个当嘲笑就好了? 04/27 20:45
120F:→ Peruheru:你确定发问的原PO真的认为自己被嘲笑? 04/27 20:46
121F:推 Peruheru:要是连发问者怎麽认为都还不知道就自顾自的认为「你被嘲 04/27 20:51
122F:→ Peruheru:笑了!」,那或许你才是那个用高姿态看人的人。 04/27 20:51
123F:→ seedpk5079:感谢指导 小弟会再去想办法研读 04/27 21:21
124F:推 Yshuan:推这篇的原po 命名跟缩排是很基本的观念 变数章节一定有讲 04/27 21:58
125F:→ seedpk5079:楼上讲的我在仿间电脑书上没看过... 04/28 12:41
126F:推 VictorTom:变数的命名(无误的话)基本上不影响程式的执行结果.... 04/28 12:44
127F:→ VictorTom:但是对於後续的开发维护有非常举足轻重的影响.... 04/28 12:45
128F:→ VictorTom:大底来说大家都会说取个有意义/合适的名字, 但是我相信 04/28 12:45
129F:→ VictorTom:许多人或许多派都有自己的style或主张, 比如可以去goo 04/28 12:45
130F:→ VictorTom:一下"匈牙利命名法"; 其实如果code只有自己看, 那麽变数 04/28 12:46
131F:→ VictorTom:你想怎麽取就取吧, 但是要给别人看或者是co-work的时候 04/28 12:46
132F:→ VictorTom:变数的命名是否有意义, 是否follow组织里惯用的规则就很 04/28 12:47
133F:→ VictorTom:重要. (甚至是每个变数後面的注解与用法可能都是关键) 04/28 12:48
134F:→ VictorTom:小弟我的程度没办法说明/推荐什麽样的命名才好, 事实上 04/28 12:48
135F:→ VictorTom:就算是'匈'这种应该也有人认为太过繁复冗长(没记错的话) 04/28 12:49
136F:→ VictorTom:argu你的书有没有讲这个没什麽意义, 不过style各有不同, 04/28 12:50
137F:→ VictorTom:但大家应该都同意好的变数命名习惯很重要; 至於怎样才算 04/28 12:50
138F:→ VictorTom:不错的, 等其他的大大推荐参考资料或书籍再看看吧:) 04/28 12:50
139F:→ sunneo:记得以前我们写大数的时候有个笑话 04/28 13:31
140F:→ sunneo:有个同学抱怨`英文字母不够多` 因为他变数取 a0~zzz 04/28 13:32
141F:→ sunneo:程式码已经2000多行了 一个基本的操作都还没完成 04/28 13:33
142F:→ sunneo:一个for回圈都没有 全部用if/else 跟难看的变数硬干 04/28 13:33
143F:→ sunneo:过没多久他就直接复制网路上的版本了,说「太长了 看不懂」 04/28 13:35
144F:→ sunneo:自己都看不懂了 怎麽期待帮忙改的人看的懂呢 04/28 13:35
145F:→ sunneo:最後这个同学跑去做VHDL的专题 04/28 13:36
146F:推 leonjye:耐心强者L大 <(_._)> 04/28 14:08
147F:推 tinabjqs:L大真是佛心~而且回答的很仔细耶 04/28 17:53







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP