#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//字元比較
int n,m;
char word[2000][10], sorted[2000][10], scramble[2000][10], sorted2[2000][10];
int cmp_char(const void* _a, const void* _b){
char* a = (char*)_a;
char* b = (char*)_b;
return *a-*b;
}
//字串比較
int cmp_string(const void* _a, const void* _b){
char* a = (char*)_a;
char* b = (char*)_b;
return strcmp(a,b);
}
int main(){
n = 0;
//輸入字典單字,將每個單字存入word[n]中
for(;;){
scanf("%s", word[n]); //會自動以空白分隔單字
if(word[n][0]=='X'&&word[n][1]=='X'&&word[n][2]=='X'&&word[n][3]=='X'&&word[n][4]=='X'&&word[n][5]=='X')break;
n++;
}
//題目的OUTPUT中有敘述,輸出要按字典排序,故此排序為必要
qsort(word, n, sizeof(word[0]), cmp_string); //幫所有單字排序(由小到大),引入cmp_string為qsort必要之參照
for(int i = 0; i<n; i++){
strcpy(sorted[i], word[i]);
qsort(sorted[i], strlen(sorted[i]), sizeof(char), cmp_char); //幫每個單字的字母各自排序
}
//輸入欲檢查之單字
char s[10];
while(scanf("%s", s)!=EOF && s[0]!='X') {
qsort(s, strlen(s), sizeof(char), cmp_char); //將其內的字母做排序
int found = 0;
for(int i = 0; i < n; i++){
if(strcmp(sorted[i], s) == 0) {
found = 1;
printf("%s\n", word[i]);
}
}
if(!found) printf("NOT A VALID WORD\n");
printf("******\n");
}
return 0;
}
2014年8月24日星期日
[UVa] 642 - Word Amalgamation
訂閱:
發佈留言 (Atom)
-
因為先前寫UVa時,檔案名稱有時會花心思改,有時就直接把題目名稱加上.cpp就貼上了 導致現在有不同的格式出現 現在要處理的事情很簡單 1. 去除空白 2. 將底線 ( _ ) 換成dash ( - ) 經過一番查詢,終於發現最簡單的方法 - re...
-
文章出處: http://infbugs.blogspot.tw/2011/12/c_20.html 謝謝沙耶,解答了我長久以來對於 input/output 的疑惑。 C 語言入門 - 在線上批改系統練功 如何練習使用基本語法 自己出個練習題試著寫...
-
一開始用數學方法推斷得出,設輸入為n k為在n的前一斜線列數,故只要找到 (1+k)*k/2 < n 的最大k值,即可判定 k%2 == 1 => ((2*n)-(k*k)-k)/2 / ((k*k)+(3*k)-(2*n)+4)/2 k%2 ==...
沒有留言:
發佈留言