簡單的演算法程式設計題-任意段落按照單詞逆序輸出
阿新 • • 發佈:2018-12-21
把這個問題拋給溫州皮鞋廠老闆,老闆直接就說這個題目的本意是讓你提出stack的解決方案。
what?stack?too low!
因為這麼個問題還要實現一個stack有點場面大了,事實上誰不知道你把一個個單詞push進去,然後再pop出來不就好了嗎?所以說stack方案太通用,不足掛齒。…週末沒事幹時折騰點此類問題,沒有錯,錯在拉開蚊帳睡覺時吵醒瘋子和小小,事情偶爾會變嚴重。
另外,使用C語言完成和使用Java完成完全不同,Java呼叫現成的class會非常簡單,複雜度完全隱藏在了內部。此外,C語言是否可以用strtok也必須有所約束。以下是我的方案,非常好玩,像我這種不會程式設計的人,請不要笑我。因為我沒有用strlen,沒有用strcpy,沒有用malloc…:
#include <stdio.h>#include <stdlib.h>int ok(char c){ if ( (c <= 90 && c >= 65) || (c <=122 && c >= 97) ) return 1; return 0;}int main(int argc, char **argv){ char orig[] = {'i', ' ', 'a', 'm', ' ', 'a', ' ', 's', 't', 'u', 'd' , 'e', 'n', 't', ',', 'a', 'n', 'd', ' ', 'y', 'o', 'u', 0}; char *buf = orig, *tbuf = orig; int i = 0, j = 0; // 獲取長度 while (*tbuf++ != 0) j++; // 前後逆序交換 for (j--; j > i; i++, j--) { char c = orig[i]; orig[i] = orig[j]; orig[j] = c; } // 遍歷 while (*buf != 0) { int k = 0, p = 0; char *temp = buf; while (ok(*(buf++))) { k++; } // 按照單詞逆序 for (k--; p < k; p++, k--) { char c = temp[p]; temp[p] = temp[k]; temp[k] = c; } } // 列印結果 printf("%s\n", orig);}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
看似個鴛鴦蝴蝶,不應該的年代。嗯?有啥不應該?
不多說。