Re: [計程] 不知道能否有10分強者分享自己的期中考 …

看板b98902HW作者 (月^4)時間14年前 (2009/11/14 23:25), 編輯推噓6(605)
留言11則, 3人參與, 最新討論串2/5 (看更多)
既然有同學須要~~ 我就提供一下好了 不過我還是覺得助教的code比較好耶@@ 以下第2,3題自己覺得寫得還滿亂的@@ //寫到後來都快搞不清啥是啥了...冏 ----------- 1. Bingo #include<stdio.h> #define SIZE 600 int p[SIZE*SIZE+1]; int r[SIZE]; int c[SIZE]; int a1=0, a2=0; int main(){ int n; int i, j, tmp, x, y, bingo=0; scanf("%d", &n); for(i=0; i<n; i++) for(j=0; j<n; j++){ scanf("%d", &tmp); p[tmp] = i + n*j; } while( scanf("%d", &tmp) != EOF ){ x = p[tmp]/n; y = p[tmp]%n; if(++r[x]==n){ bingo = tmp; break; } if(++c[y]==n){ bingo = tmp; break; } if(x+y==n-1) if(++a1==n){ bingo = tmp; break; } if(x-y==0) if(++a2==n){ bingo = tmp; break; } } printf("%d\n", bingo); return 0; } ------ 2. The Robot #include<stdio.h> int board[1002][1002]; int change(int limit, int n){ if(n==-1) return (limit-1); if(n==limit) return 0; return n; } int main(){ int hx, ly, tmp; int i, j, rx, ry, x, y; scanf("%d%d", &hx, &ly); scanf("%d%d", &rx, &ry); board[rx][ry] = 1; scanf("%d", &tmp); for(i=0; i<tmp; i++){ scanf("%d%d", &x, &y); board[x][y] = 1; } while(1){ if(board[rx][change(ly,ry+1)]==0){ ry = change(ly,ry+1); board[rx][ry]=1; } else if(board[change(hx,rx+1)][ry]==0){ rx = change(hx,rx+1); board[rx][ry]=1; } else if(board[rx][change(ly,ry-1)]==0){ ry = change(ly,ry-1); board[rx][ry]=1; } else if(board[change(hx,rx-1)][ry]==0){ rx = change(hx,rx-1); board[rx][ry]=1; } else break; } printf("%d %d\n", rx, ry); scanf(" "); return 0; } ------ 3. The Dictionary #include<stdio.h> #include<stdlib.h> char pr[6], s[27]; int l, length; int cmp(const void *a, const void *b){ return (*(char*)a - *(char*)b); } int vowel(char a){ switch(a){ case 'a': case 'e': case 'i': case 'o': case 'u': return 1; default: return 0; } } void ans(int k){ int i; if(k==l){ printf("%s\n", pr); return; } for(i=0; i<length; i++){ if(k>0){ if( (!( vowel(pr[k-1])&&vowel(s[i]) )) && pr[k-1]!=s[i] ){ pr[k] = s[i]; ans(k+1); } } else{ pr[k] = s[i]; ans(k+1); } } } int main(){ int i; scanf("%s%d", s, &l); for(i=0; s[i]!='\0'; i++); length = i; qsort(s, length, sizeof(char), cmp); pr[l]='\0'; ans(0); scanf(" "); return 0; } ------ 4. Date #include<stdio.h> #include<stdlib.h> int date[1000000][3]; int cmp(const void *a, const void *b){ int i; int *pa = (int*)a; int *pb = (int*)b; for(i=0; i<3; i++){ if( *(pa+i) > *(pb+i) ) return 1; if( *(pa+i) < *(pb+i) ) return -1; } return 0; } int main(){ int n, i; scanf("%d", &n); for(i=0; i<n; i++) scanf("%d%d%d", &date[i][0], &date[i][1], &date[i][2]); qsort(date, n, sizeof(int)*3, cmp); for(i=0; i<n; i++) printf("%d %d %d\n", date[i][0], date[i][1], date[i][2]); scanf(" "); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.9.195

11/15 00:24, , 1F
哈謝啦
11/15 00:24, 1F

11/15 00:59, , 2F
ask函數if那一段裡 !vowel(pr[k-1]&&vowel(s[i]))
11/15 00:59, 2F

11/15 01:00, , 3F
可不可以解釋一下...這邏輯我不太懂="=
11/15 01:00, 3F

11/15 01:03, , 4F
我知道是兩者都不能是母音..可是程式的邏輯是什麼
11/15 01:03, 4F

11/15 01:22, , 5F
你括弧打錯了
11/15 01:22, 5F

11/15 01:22, , 6F
程式碼中的應該是 !( vowel(pr[k-1]) && vowel(s[i]) )
11/15 01:22, 6F

11/15 01:23, , 7F
而且題目的要求不是兩者都不是母音
11/15 01:23, 7F

11/15 01:24, , 8F
而是不能兩個都是母音
11/15 01:24, 8F

11/15 07:20, , 9F
因為s[i]是準備要放入pr[k]的字元,因此要先判斷
11/15 07:20, 9F

11/15 07:21, , 10F
pr[k-1]和s[i]是否同時為母音,是的話就不能把s[i]放入
11/15 07:21, 10F

11/15 07:21, , 11F
pr[k]裡面
11/15 07:21, 11F
文章代碼(AID): #1A_ilM-B (b98902HW)
討論串 (同標題文章)
文章代碼(AID): #1A_ilM-B (b98902HW)