資源簡介
試題 1 n 個人圍成一圈, 并依次編號 1~n,。從編號為 1 的人開始,按順時針方向每隔一人選出一個,
剩下的人重新圍成一圈,如此循環(huán)直到剩下兩人,這剩下的兩人就是幸運兒。如果你想成為最后兩個
幸運兒,請問開始時應(yīng)該站在什么位置?(設(shè) 3<=n<=50)
輸入:開始時的人數(shù) n
輸出:第 1行是選出順序,第 2 行是兩名幸運兒的開始位置(按升序排列),位置編號之間用一個空格
分開。

代碼片段和文件信息
#include
#include
int?na[51]b[51];
int?j=1;
void?main()
{
clock_t?startend;
FILE?*fp1*fp2;
int?i=0kts=1q;
int?c[25];
start=clock();
//文件輸入n
fp1=fopen(“試題一輸入.txt““r“);
if(fp1==NULL)
{
printf(“Cann‘t?open?this?test!\n“);
//exit(0);
}
/*c[1]=fgetc(fp1);
c[2]=fgetc(fp1);
fclose(fp1);
n=10*(c[1]-48)+(c[2]-48);*/
fscanf(fp1“%d“&n);
printf(“n=%d“n);
/*printf(“請輸入n的值(3<=n<=50):“);?????????//鍵盤輸入n
scanf(“%d“&n);
while(n>50||n<3)?
{
printf(“\nn的值超界!\n請重新輸入:“);
scanf(“%d“&n);
}*/
printf(“\n“);????????????????????????????//打印?n
for(i=1;i<=n;i++)
{
a[i]=i;
printf(“%d?“a[i]);
}
printf(“\n“);
q=a[n];?? //q?標(biāo)記被選一圈之前的沒有被選出之中的最后一個值?
printf(“\n新加入排好的數(shù)為:\n“);
for(t=1i=2;i<=n;i+=2j++t++)
{
b[j]=a[i];???????????????????????????//b[]存放被選出的順序
c[t]=a[i-1];?????????????????????????//c[]暫存沒有被選出的
printf(“%d?“b[j]);
}
if(b[j-1]!=q)c[t++]=q;??????????????????
printf(“\n剩下的數(shù)為:\n“q);
for(i=1;i {?
a[i]=c[i];
printf(“%d?“c[i]);??????????????????//把c[]中的數(shù)存入a[],使之成為一新數(shù)列
}
k=t-1; ????????????????????????????????
printf(“a[k]=%d\n“a[k]);????????????????//輸出被選一圈之后的沒有被選出之中的最后一個值a[k]
while(k>2)???????????????????????????
{? /*判斷一次挑選前后的最后一個值,如果相等則下一次挑選
??從最后一個開始,否則從第一個開始*/
if(a[k]==q) ???????????????????????????????
{??
q=a[k];
printf(“\n進(jìn)入一:\n新加入排好的數(shù)為:\n“);
for(t=1i=1;i<=k;i+=2j++t++)
{
b[j]=a[i];
c[t]=a[i+1];
printf(“%d?“b[j]);
}
if(b[j-1]==q)t=t-1;
printf(“\nq1=%d\n剩下的數(shù)為:\n“q);
for(i=1;i {
a[i]=c[i];
printf(“%d?“a[i]);
}
k=t-1;?
printf(“\nk=%d\n“k);
if(k<2) c[2]=b[j-1];
printf(“q2=%d\n“q);
}
else?
{
q=a[k];
printf(“\n進(jìn)入二:\n新加入排好的數(shù)為:\n“);
for(t=1i=2;i<=k;i+=2j++t++)
{
b[j]=a[i];
c[t]=a[i-1];
printf(“%d?“b[j]);
}
if(b[j-1]!=q)c[t++]=a[k];
printf(“\n剩下的數(shù)為:\n“);
for(i=1;i {?
a[i]=c[i];
printf(“%d?“a[i]);
}
printf(“\nt=%d\n“t);
k=t-1;
printf(“\nk=%d\n“k);
if(k<2)c[2]=b[j-1];
printf(“\nq=%da[k]=%d\n“qa[k]);
}
s=s*2;
}
fp2=fopen(“試題一的輸出.txt““w“);
if(fp2==NULL)
{
printf(“cann‘t?open?this?test!\n“);
//exit(0);
}
printf(“\n選出的順序:\n“);
for(i=1;i<=n-2;i++)
{
printf(“%d?“b[i]);
fprintf(fp2“%d?“b[i]);
}
printf(“\n兩個幸運兒的開始位置:\n“);
printf(“%d?%d?\n“c[1]c[2]);
fprintf(fp2“\n%d?%d“c[1]c[2]);
end=clock();
printf(“time=%d\n“end-start);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????????2??2006-07-18?16:48??新建文件夾\試題一輸入.txt
?????文件????????416??2006-07-19?08:11??新建文件夾\2005.01.txt
?????文件???????2932??2006-07-18?16:46??新建文件夾\試題一.cpp
?????目錄??????????0??2006-07-20?09:58??新建文件夾
-----------?---------??----------?-----??----
?????????????????3350????????????????????4
評論
共有 條評論