最新更新,截止14:50.
已經(jīng)出現(xiàn)的題目:1 2 4 6 7 9 10 11 12 14 16 17 21 26 27 29 30 31 32 38 41 44 48 62 65 68 75 77 81 83 85 87 89 92 95 96 100 (有些是類似題,注意哦)
我抽到的南開的第41題,無憂的第51題
★☆題目41(無憂id 51 SIX/NINE問題)
下列程序prog1.c的功能是:計(jì)算出自然數(shù)SIX和NINE,它們滿足的條件是SIX+SIX+SIX=NINE+NINE的個(gè)數(shù)cnt以及滿足此條件所有的SIX與NINE的和SUM。請(qǐng)編寫函數(shù)countValue()實(shí)現(xiàn)程序的要求,最后調(diào)用函數(shù)writeDat()把結(jié)果cnt和sum,輸出到文件OUT15.DAT中。
其中的S,I,X,N,E各代表一個(gè)十進(jìn)制數(shù)字。
部分源程序存在文件prog1.c中。
請(qǐng)勿改動(dòng)主函數(shù)main()和輸出數(shù)據(jù)函數(shù)writeDat()的內(nèi)容。
#include <stdio.h>
int cnt,sum;
void countValue()
{ int s,i,x,n,e,six,nine;
for(s=1;s<10;s++)
for(i=0;i<10;i++)
for(x=0;x<10;x++)
for(n=1;n<10;n++)
for(e=0;e<10;e++)
{ six=s*100+i*10+x;
nine=n*1000+i*100+n*10+e;
if(3*six==2*nine)
{ cnt++;sum+=six+nine;}
}
}
void main()
{
cnt=sum=0;
countValue();
printf("滿足條件的個(gè)數(shù)=%d\n",cnt);
printf("滿足條件所有的SIX與NINE的和=%d\n",sum);
writeDat();
}
writeDat()
{
FILE *fp;
fp=fopen("OUT15.DAT","w");
fprintf(fp,"%d\n%d\n",cnt,sum);
fclose(fp);
}
另一種經(jīng)典解法:
void countValue()
{ int i;
for(i=666;i<=999;i=i+2)
if((i/10%10==(3*i/2)/100%10)&&((3*i/2)/1000==(3*i/2)%100/10))
{cnt++;sum+=i+3*i/2;}
}
運(yùn)算結(jié)果為:
滿足條件的個(gè)數(shù)=4
滿足條件所有的SIX與NINE的和=9430
某網(wǎng)友:
抽到第一題
題目1:下列程序的功能是:將大于整數(shù)m且緊靠m的k個(gè)素?cái)?shù)存入數(shù)組xx。請(qǐng)編寫函數(shù)num(int m,int k,int xx[])實(shí)現(xiàn)函數(shù)的要求 ,最后調(diào)用函數(shù)readwriteDAT()把結(jié)果輸出到文件out.dat中。
例如:若輸入17,5,則應(yīng)輸出:19,23,29,31,37。
注意:部分源程序已給出。
請(qǐng)勿改動(dòng)主函數(shù)main()和函數(shù)readwriteDAT()的內(nèi)容void num(int m,int k,int xx[])
{int data=m+1;
int half,n=0,I;
while(1)
{half=data/2;for(I=2;I<=half;I++)
if(data%I==0)break;
if(I>half)
{xx[n]=data;n++;}
if(n>=k)break;
data++;
}
}
開始把
data%I==0 的I打成 !了 驚了一身冷汗!
幸虧發(fā)現(xiàn)!
呵呵
運(yùn)行結(jié)果正確
交卷程序?qū)Φ脑捑蜎]問題了
某網(wǎng)友:
我抽到出圈的題
是個(gè)200個(gè)四位數(shù)的,就是亂換位,然后不能被5整除,然后統(tǒng)計(jì)個(gè)數(shù),排序。大概這個(gè)意思的,查了南開100題,沒有一模一樣的,只有相像的。幸虧我們考場(chǎng)松,我的朋友替我考的,結(jié)果大概是12個(gè)符合要求的,有人抽到這題馬?類似南開52題
****************************************************************************************
關(guān)于出圈題的詳細(xì)解答(希望對(duì)大家有所幫助)
出圈題的詳細(xì)解答
南開第57題:
解題思路:
題目中已經(jīng)給出了算法過程,我們下面就看看怎么用代碼實(shí)現(xiàn):
(1)將1到n個(gè)人的序號(hào)存入一維數(shù)組p中;
這個(gè)我想大家應(yīng)該都沒有問題的了:很簡(jiǎn)單的一句循環(huán)賦值。
for(i=1;i<=n;i++)p[i-1]=i;
(2)若第i個(gè)人報(bào)數(shù)后出圈,則將p[i]置于數(shù)組的倒數(shù)第i個(gè)位置上,而原來第i+1個(gè)至倒數(shù)第i個(gè)元素依次向前移動(dòng)一個(gè)位置;
(3)重復(fù)第(2)步直至圈中只剩下p[1]為止。
難點(diǎn)就在這后面兩步,首先可以看出是要做一個(gè)循環(huán),而且循環(huán)的條件是遞減
馬上可以先寫出一個(gè)循環(huán)遞減的框架
for(i=n;n>1;n--){}
接下來就是該怎么寫循環(huán)體的內(nèi)容了:我們可以發(fā)現(xiàn),題目的算法過程2描述的很清楚,具體如下:
s=(s+m-1)%i;首先,求出出圈人的位置,這里用一個(gè)求余是為了實(shí)現(xiàn)圈循環(huán)(也就是將隊(duì)列頭尾相連),這里i是圈中剩余的人數(shù)(除去出圈后的人)。 當(dāng)然,我們稍微注意一下,那就是沒有第0位的出圈人存在,所以這里如果s=0是不對(duì)的,
其實(shí)這種情況是出圈人是隊(duì)尾的那一個(gè)人,所以這里加上一個(gè)判斷:
if(s==0)s=i;
好了,我們?nèi)〉搅顺鋈θ说奈恢昧耍俏覀兙鸵?BR>"則將p[i]置于數(shù)組的倒數(shù)第i個(gè)位置上,而原來第i+1個(gè)至倒數(shù)第i個(gè)元素依次向前移動(dòng)一個(gè)位置"
實(shí)現(xiàn)這一句的算法過程的代碼,可以看出也是一個(gè)循環(huán):
w=p[s-1]; 首先,把出圈人的號(hào)碼暫時(shí)放起來(因?yàn)榇藭r(shí)倒數(shù)第i個(gè)位置還有人占據(jù),不能替換掉)
接著我們要把倒數(shù)第i個(gè)位置騰空出來,
而這個(gè)算法的實(shí)現(xiàn)就是“第i+1個(gè)至倒數(shù)第i個(gè)元素依次向前移動(dòng)一個(gè)位置”
明白了這句話的意思后,馬上可以寫出下面的一個(gè)循環(huán)代碼來實(shí)現(xiàn)
for(j=s;j<i;j++)p[j-1]=p[j];出圈人的位置讓給他的下一位,依次類推,最后騰出倒數(shù)第i個(gè)位置給出圈人。
最后出圈人占據(jù)倒數(shù)第i個(gè)位置:p[i-1]=w;(注意這里第i個(gè)位置在數(shù)組中下標(biāo)是i-1,因?yàn)閿?shù)組下標(biāo)是0開始的,^_^)
到這里為止,循環(huán)體也寫完了,整合起來,就可以得到下面的完整函數(shù)代碼了:
void Josegh(void)
{
int i,j,w; 定義一些用于暫時(shí)存放出圈人和循環(huán)變量。
for(i=1;i<=n;i++) 開始初始化循環(huán)賦值。
p[i-1]=i;
for(i=n;i>=2;i--) 循環(huán)體開始
{s=(s+m-1)%i; 尋找出圈人
if(s==0)
s=i;
w=p[s-1]; 暫時(shí)安置出圈人
for(j=s;j<i;j++) 給出圈人騰位置
p[j-1]=p[j];
p[i-1]=w; 重新安置出圈人
}
}