Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
4重循环,0ms~#include <stdio.h> void sort(int *stamps, int stampCnt) { int i = 0, j = 0 ; int min = 0 ; int tmp = 0 ; for(i = 0; i < stampCnt - 1; i++) { min = i ; for(j = i + 1; j < stampCnt; j++) { if(stamps[j] < stamps[min]) min = j ; } tmp = stamps[i] ; stamps[i] = stamps[min] ; stamps[min] = tmp ; } } void printResult(int total, int *stamps, int stampCnt, int stampType, int tie) { unsigned int i = 0 ; if(0 == stampCnt) { printf("%d ---- none\r\n", total) ; } else { printf("%d (%d):", total, stampType) ; if(tie) { printf(" tie\r\n") ; } else { sort(stamps, stampCnt) ; for(i = 0; i < stampCnt; i++) printf(" %d", stamps[i]) ; printf("\r\n") ; } } } void clac(int total, int *stamps, int stampCnt) { int repeat = 1 ; int cnt = 0 ; int i = 0, j = 0, k = 0, m = 0 ; int result[4] = {0} ; int resultCnt = 0 ; int tie = 0 ; int tmpVal = 0 ; while(repeat <= 4) { for(i = 0; i < stampCnt; i++) { tmpVal = stamps[i] * repeat ; if(tmpVal > total) break ; if(tmpVal == total) { if(resultCnt > repeat) break ; if((resultCnt == repeat) && result[repeat-1] == stamps[i]) { tie = 1; break ; } for(cnt = 0; cnt < repeat; cnt++) result[cnt] = stamps[i] ; resultCnt = cnt ; tie = 0 ; continue ; } if(repeat >= 4) continue ; for(j = (repeat==1)?(i+1):0; j < stampCnt; j++) { if(j == i) continue ; tmpVal = stamps[i] * repeat + stamps[j] ; if(tmpVal > total) break ; if(tmpVal == total) { if(resultCnt > repeat + 1) break ; if(resultCnt == repeat + 1) { if(result[repeat] == stamps[j]) tie = 1 ; break ; } for(cnt = 0; cnt < repeat; cnt++) result[cnt] = stamps[i] ; result[cnt++] = stamps[j] ; resultCnt = cnt ; tie = 0 ; continue ; } if(repeat >= 3) continue ; for(k = j + 1; k < stampCnt; k++) { if(k == i) continue ; tmpVal = stamps[i] * repeat + stamps[j] + stamps[k] ; if(tmpVal > total) break ; if(tmpVal == total) { if(k < i) { tie = 1 ; break ; } if(resultCnt > repeat + 2) break ; if(resultCnt == repeat + 2) { if(result[repeat+1] == stamps[k]) tie = 1 ; break ; } for(cnt = 0; cnt < repeat; cnt++) result[cnt] = stamps[i] ; result[cnt++] = stamps[j] ; result[cnt++] = stamps[k] ; resultCnt = cnt ; tie = 0 ; continue ; } if(repeat >= 2) continue ; for(m = k+1; m < stampCnt; m++) { tmpVal = stamps[i] + stamps[j] + stamps[k] + stamps[m]; if(tmpVal > total) break ; if(tmpVal == total) { if(resultCnt == repeat + 3) { if(result[repeat+2] == stamps[m]) tie = 1 ; break ; } result[0] = stamps[i] ; result[1] = stamps[j] ; result[2] = stamps[k] ; result[3] = stamps[m] ; resultCnt = 4; tie = 0 ; continue ; } } } } } if(resultCnt) { printResult(total, result, resultCnt, resultCnt - repeat + 1, tie) ; return ; } repeat++ ; } printResult(total, NULL, 0, 0, 0) ; } int main(int argc, char *argv[]) { int stamps[100] = {0} ; int stampCnt = 0 ; int total = 0 ; while(scanf("%d", &stamps[stampCnt]) != EOF) { if(stamps[stampCnt] != 0) { stampCnt++ ; continue ; } sort(stamps, stampCnt) ; while(scanf("%d", &total) && total) { clac(total, stamps, stampCnt) ; } stampCnt = 0 ; } return 0 ; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator