【閒聊】傻眼的寒訓



贊助商連結


頁 : 1 2 3 [4]

VicLin
2005-02-03, 12:56 AM
#include <stdio.h>
#include <conio.h>

int *Arr = NULL;
int N;
void swap(int A,int B){
int Temp = Arr[A];
Arr[A] = Arr[B];
Arr[B] = Temp;
}
int f(){
for(int i=0;i<N;i++){
int Smallest = i;
for(int j=i;j<N;j++){
if(Arr[j]<Arr[Smallest]){
Smallest = j;
}
}
swap(i,Smallest);
}
}
int main(int argc, char *argv[]){
while(scanf("%d",&N) != EOF){
Arr = new int[N];
for(int i=0;i<N;i++){
scanf("%d",&Arr[i]);
}
f();
int Sum = 0;
for(int i=0;i<N;i++){
Sum += (N-i)* Arr[i];
}
printf("%d\n",Sum);
}

getch();
return 0;
}
第二題

贊助商連結


VicLin
2005-02-03, 01:33 AM
#include <stdio.h>
#include <conio.h>
#include <string.h>

char A[256];
char B[256];
char C[256];
int f(){
int ALen = strlen(A);
int BLen = strlen(B);
int First = 0;
for(int i=0;i<ALen;i++){
for(int j=First;j<BLen;j++){
if(A[i]==B[j]){
First = j+1;
C[strlen(C)] = A[i];
}
}
}
}
int main(int argc, char *argv[]){
while(scanf("%s %s",A,B) != EOF){
memset(C,0,sizeof(C));
f();
printf("The LCS of \"%s\" and \"%s\" is \"%s\"\n",A,B,C);
}

getch();
return 0;
}
第四題

修訂 First要+1

VicLin
2005-02-03, 01:36 AM
第五題
不會玩梭哈 XD
跳過....

mzhuang
2005-02-03, 01:38 AM
今天考試真想哭...粗心> <"

不知道還有沒有參加選訓的機會了..

第一題:簡單的dp..費蒙那數列..

第二題:忘記加進排序結果錯掉了..

第三題:質因數分解...不知道怎樣就是暴掉..int

第四題:lcs..看不懂題目..做的一團亂..

第五題.UNIX ls搜尋..死

第六題..梭哈..死(苦工題

第七...最短路徑...掛

第八題...根本不可能寫的出來..兩塊多邊形重疊..(求聯集之座標)

只做四題...又錯了一堆..搞到最後只有一題對..好傷心

心情很差~"~

第一次看的時候直覺第八題最直觀 :|||:
就找出重疊的那幾個座標
帶入多邊型面積行列式就好了呀 :D

TomX
2005-02-03, 01:54 AM
再看一次題目吧...^^"

1塊以上的多邊形(凹或凸)..重疊面積..

VicLin
2005-02-11, 11:24 PM
#include <stdio.h>

#include <string>
using namespace std;

bool MatchStr(const char *MatchStr,const char *String){
int i = 0;
int Begin = 0; // &#166;&#236;&#169;&#243;String&#184;&#204;&#170;&#186;°_&#194;I
bool IsHead = true;
while(MatchStr[i]){
switch(MatchStr[i]){
case '*':
IsHead = false;
break;
case '?':
IsHead = false;
if(String[Begin] == 0){
return false;
}
Begin++;
break;
default: // ぴ&#228;&#165;&#166;&#166;r&#164;&#184; §&#228;&#165;X&#166;&#185;&#166;r&#166;&#234; ぴ&#195;±NBegin&#169;&#185;&#171;&#225;±&#192;
//printf("Match\n");
int j = Begin;
int k = i;
while(MatchStr[k] != '?' && MatchStr[k] != '*' && MatchStr[k]){
if(String[j] == 0){ // ぴ&#236;&#186;&#201;&#192;Y&#164;F
return false;
}
if(MatchStr[k] == String[j]){ // &#166;r&#164;&#184;&#172;&#219;&#166;P
k++; // &#164;U&#164;@&#173;&#211;&#166;r&#164;&#184;
}else{ // &#166;r&#164;&#184;&#164;&#163;&#166;P
if(MatchStr[i] == String[j]){ // &#187;P&#178;&#196;&#164;@&#173;&#211;&#166;r&#172;&#219;&#166;P
k = i+1;
}else{
k = i; // &#178;&#196;&#164;@&#173;&#211;&#166;r&#164;&#184;
}
}
j++;
}
if(MatchStr[k] == 0){ // ぴ&#236;&#186;&#201;&#192;Y &#166;p&#170;G&#166;r&#166;&#234;&#164;&#163;&#172;°&#186;&#201;&#192;Y &#164;&#163;&#166;X
if(String[j] != 0){
return false;
}
}
if(IsHead){ // &#178;&#196;&#164;@&#173;&#211; &#166;r&#166;&#234;&#164;&#163;&#165;i&#165;H&#184;&#245;&#185;L&#166;r&#166;&#234;§&#228;&#180;M
if(k != j){
return false;
}
IsHead = false;
}
Begin = j;
i = k-1;
//printf("%d %d\n",Begin,i);
}
i++;
}
return true;
}
main(){
int N;
char **FileNameArr = NULL;
char **Match = NULL;
while(scanf("%d",&N) != EOF){
int i=0;
FileNameArr = new char*[N];
Match = new char*[N];
for(i=0;i<N;i++){
FileNameArr[i] = new char[256];
memset(FileNameArr[i],0,256);
}
for(i=0;i<N;i++){
scanf("%s",FileNameArr[i]);
}
int M = 0;
scanf("%d",&M);
for(i=0;i<M;i++){
Match[i] = new char[256];
memset(Match[i],0,256);
}
for(i=0;i<M;i++){
scanf("%s",Match[i]);
}
printf("-------Out put-------\n");
for(i=0;i<M;i++){
for(int j=0;j<N;j++){
if(MatchStr(Match[i],FileNameArr[j])){
printf("%s\n",FileNameArr[j]);
}
}
printf("\n");
}
}
return 0;
}

嗯 偷懶了好久
第六題出來了 XD
不好寫阿 三月份又有IOI的比賽
再不做題目又要被幹掉了

dou0228
2005-02-12, 01:08 AM
先謝謝VicLin兄回了那麼大一篇..

據我所知..陣列int arr[100]的名稱arr本身代表一個指標...

假設開100格..則0~99格可以填入int..arr[100]則是填入..\0

'\0'只是告訴電腦陣列讀到這邊結束..至於單位長度由資料型態決定!

這是我知道的..不過...NULL=='\0'嗎..

請告訴我多一點> <"

那是因為某些function 必須以 '\0' 做為結尾, 並不表示陣列最後一個元素必須是 '\0'

而且, int arr[100], 你可以存取 arr[100] 嗎? ;)

實際上 NULL 只是被 define 成 (void *) 0 而已..
把 0 轉型成一個 generic pointer

pointer 基本上至少要有 4 bytes, 剛好和 unsigned long 一樣

所以你可能會看到, 有些程式把 unsigned long 轉成別的型態 :D

Anyway, 字元陣列也並非一定就得要 '\0' 結尾, 端看須要而定.
最常見的當然是 printf()