char* selecta(char* a[],int p,int r,int i,int size) { if(p==r) return a[p]; int q=partition(a,p,r,size); int k=q-p+1; if(i==k) return a[q];//pivot else { if(i<k) return selecta(a,p,q-1,i,size); else return selecta(a,q+1,r,i-k,size); } }
int qlearning(){ /* Q値の構造体 */ Qvalue qv, *pqv; pqv = &qv; /* Q値の初期化 */ initqvalue(pqv); printqvalue(pqv); /* 学習の本体 */ int i=0; int s=0; /* 状態 */ int t=0; /* 時刻 */ for(i=0; i < GENMAX; ++i){ s = 0; for(t=0; t < 3; ++t){ /* 行動選択 */ s = selecta(s, pqv); /* Q値の更新 */ pqv->qvalue[s] = updateq(s, pqv); } printf("*** Learnnig count = %d ***\n", i); printqvalue(pqv); } return 0; }
int main() { char c;int count=0; FILE* f=fopen("text.txt","r"); while((c=getc(f))!=EOF) { if((c==' ')||(c=='\n')) count++; } fclose(f); FILE *input; char words[count][30]; int i; input=fopen("text.txt","r"); if(input==(FILE*)NULL) { printf("no files"); return(0); } //read contents of file into array else{ for(i=0;i<count;i++) fscanf(input,"%s",&words[i]);} //printf("^%s^",words[9]); char* g[count]; for(i=0;i<count;i++) { g[i]=words[i]; } int size=count;//printf("^^%d ",size); int k=0; do { printf("\nenter k: "); scanf("%d",&k); if(k<=0) exit(1); else if(k > count) printf("words are less than k"); else { char* s= selecta(g,0,size-1,count-k+1,size); printf("\n %s \n ",s); } }while(k>0); return 0; }