《《算法設(shè)計(jì)與分析》實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)二》由會(huì)員分享,可在線閱讀,更多相關(guān)《《算法設(shè)計(jì)與分析》實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)二(8頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、
武 漢 工 程 大 學(xué)
計(jì)算機(jī)科學(xué)與工程學(xué)院
《算法設(shè)計(jì)與分析》實(shí)驗(yàn)報(bào)告
專業(yè)班級(jí)
學(xué)生學(xué)號(hào)
學(xué)生姓名
實(shí)驗(yàn)項(xiàng)目
實(shí)驗(yàn)類別
實(shí)
驗(yàn)
目
的
及
要
求
類 別
上機(jī)表現(xiàn)
實(shí)驗(yàn)報(bào)告
說(shuō)明:
計(jì)算機(jī)工程 01 班 實(shí)驗(yàn)地點(diǎn) 計(jì)算機(jī)大樓 403
指導(dǎo)教師 張立
實(shí)驗(yàn)時(shí)間 2014-04-09
基本的算法策略
設(shè)計(jì)性實(shí)驗(yàn)
2、
目的與要求:
1) 掌握基本算法策略的設(shè)計(jì)思想與方法;
2) 熟練掌握基本算法策略的選擇與應(yīng)用;
3) 熟練掌握基本算法策略的編程實(shí)現(xiàn)與優(yōu)化。
實(shí)驗(yàn)內(nèi)容要點(diǎn):
1) 分別用蠻力法和數(shù)學(xué)建模法求解同余方程組;
成 績(jī) 評(píng) 定 表
評(píng) 分 標(biāo) 準(zhǔn) 分值 得分 合 計(jì)
積極出勤、遵守紀(jì)律
30 分
主動(dòng)完成實(shí)驗(yàn)設(shè)計(jì)任務(wù)
及時(shí)遞交、填寫規(guī)范
70 分
內(nèi)容完整、體現(xiàn)收獲
評(píng)閱教師:
日 期: 年 月 日
計(jì)算機(jī)科學(xué)與工程學(xué)院
3、
實(shí) 驗(yàn) 內(nèi) 容
( 2)猴子吃桃子問(wèn)題,猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過(guò)癮,又多吃了兩個(gè),第二天早上又將剩下的桃子吃掉一半,又多吃了兩個(gè),以后每天早上都吃了前一天剩下的
一半零兩個(gè), 到了第 10 天早上想再吃時(shí), 就只剩下兩個(gè)桃子了, 問(wèn)第一天猴子摘了多少桃子?代碼:
#include
void main()
{
int a=2,i;
for(i=8;i>=0;i--)
a=(a+2)*2;
printf(" 第一天猴子摘下 %d 個(gè)桃子 \n",a);
}
測(cè)
4、試:
( 3) 54 張撲克牌,兩個(gè)人輪流拿牌,每人每次最少取一張牌最多取 4 張牌,誰(shuí)拿最后一張誰(shuí)
輸。編寫模擬計(jì)算機(jī)先拿牌且必勝的算法。
代碼:
#include
void main()
{
int a,b,c,d,e,f;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
if(b!=a)
for(c=0;c<=9;c++)
if(c!
5、=a&&c!=b)
for(d=0;d<=9;d++)
《算法分析與設(shè)計(jì)》實(shí)驗(yàn)報(bào)告 2
計(jì)算機(jī)科學(xué)與工程學(xué)院
if(d!=a&& d!=b && d!=c)
{
e=a*1000+b*100+c*10+d;
f=(a+b+c+d)*(a+b+c+d);
if(e%f==0)
printf("%d%d%d%d\t",a,b,c,d);
}
printf("\n");
}
測(cè)試:
6、( 8)尋找滿足下列條件的四位數(shù)字: 1.無(wú)重復(fù)數(shù)字; 2.千位數(shù)字非零; 3.能整除它的各個(gè)位數(shù)字和的平方。
代碼 :
#include
void main()
{
int i,c;
printf(" 游戲開始,計(jì)算機(jī)先拿牌 !\n");
c=51;
printf(" 計(jì)算機(jī)拿 3 張 ! 還剩 %d 張 \n",c);
while(c>1)
{
printf(" 請(qǐng)你拿牌,選擇拿牌的張數(shù)( 1-4 張) \n");
scanf("%d",&i);
c=c-5;
printf(" 計(jì)算機(jī)拿了
7、 %d 張,還剩 %d 張 \n",5-i,c);
}
printf(" 你拿最后一張,計(jì)算機(jī)贏了! \n");
}
測(cè)試:
《算法分析與設(shè)計(jì)》實(shí)驗(yàn)報(bào)告 3
計(jì)算機(jī)科學(xué)與工程學(xué)院
8、
《算法分析與設(shè)計(jì)》實(shí)驗(yàn)報(bào)告 4
計(jì)算機(jī)科學(xué)與工程學(xué)院
#include
int amount=0, Board[100][100];
vo
9、id Cover(int tr, int tc, int dr, int dc, int size);
void OutputBoard(int size);
void main()
{
int size=1,x,y,k,i;
printf(" 輸入 K 值 :");
scanf("%d",&k);
for (i=1;i<=k;i++)
size=size*2;
printf(" 輸入殘缺個(gè)的位置 x, y:");
scanf("%d%d",&x,&y);
Cover(0, 0, x, y, size);
OutputBo
10、ard(size);
《算法分析與設(shè)計(jì)》實(shí)驗(yàn)報(bào)告 5
計(jì)算機(jī)科學(xué)與工程學(xué)院
}
void Cover(int tr, int tc, int dr, int dc, int size)
{
int s,t;
if (size<2)
return;
amount= amount+1;
t = amount; // 所使用的三格板的數(shù)目
s=size/2; // 子問(wèn)題棋盤大小
if (dr < tr + s && dc < tc + s) //殘缺方格位于左上棋盤
{
Cover(tr, tc, d
11、r, dc, s);
Board[tr + s - 1][tc + s] = t; // 覆蓋1號(hào)三格板
Board[tr + s][tc + s - 1] = t;
Board[tr + s][tc + s] = t;
Cover (tr, tc+s, tr+s-1, tc+s, s); // 覆蓋其余部分
Cover(tr+s, tc, tr+s, tc+s-1, s);
Cover(tr+s, tc+s, tr+s, tc+s, s);
}
else if(dr < tr + s && dc >= tc + s) //殘缺方格位于右上象限
12、
{
Cover(tr, tc+s, dr, dc, s);
Board[tr + s - 1][tc + s - 1] = t; // 覆蓋2號(hào)三格板
Board[tr + s][tc + s - 1] = t;
Board[tr + s][tc + s] = t;
Cover (tr, tc, tr+s-1, tc+s-1, s); //覆蓋其余部分
Cover(tr+s, tc, tr+s, tc+s-1, s);
Cover(tr+s, tc+s, tr+s, tc+s, s);
}
else if (dr >= tr + s
13、&& dc < tc + s) //殘缺方格位于覆蓋左下
{
Cover(tr+s, tc, dr, dc, s);
Board[tr + s - 1][tc + s - 1] = t;// 覆蓋3號(hào)三格板
Board[tr + s - 1][tc + s] = t;
Board[tr + s][tc + s] = t;
Cover (tr, tc, tr+s-1, tc+s-1, s); // 覆蓋其余部分
Cover (tr, tc+s, tr+s-1, tc+s, s);
Cover(tr+s, tc+s, tr+s, tc+s, s);
14、
}
else if (dr >= tr + s && dc >= tc + s)// 殘缺方格位于右下象限
{
Cover(tr+s, tc+s, dr, dc, s);
Board[tr + s - 1][tc + s - 1] = t; // 覆蓋4號(hào)三格板
Board[tr + s - 1][tc + s] = t;
Board[tr + s][tc + s - 1] = t;
《算法分析與設(shè)計(jì)》實(shí)驗(yàn)報(bào)告 6
計(jì)算機(jī)科學(xué)與工程學(xué)院
Cover (tr, tc, tr+s-1, tc+s-1, s); // 覆蓋其余部
15、分
Cover (tr, tc+s, tr+s-1, tc+s, s);
Cover(tr+s, tc, tr+s, tc+s-1, s);
}
}
void OutputBoard(int size)
{
for (int i = 0; i < size; i++)
{
for(int j=0; j < size; j++)
printf("%-4d",Board[i][j]);
printf("\n");
}
}
16、
《算法分析與設(shè)計(jì)》實(shí)驗(yàn)報(bào)告 7
計(jì)算機(jī)科學(xué)與工程學(xué)院
實(shí) 驗(yàn) 總 結(jié)
這次的實(shí)驗(yàn)和上次的實(shí)驗(yàn)難度相差不大,猴子摘桃子的題目用到了倒推法,從最后一天一只推到第一天,即可得出結(jié)果。第二個(gè)題目起初覺(jué)得很難。后來(lái)仔細(xì)想了一下,兩個(gè)人一起拿牌可以保證一共拿五張, 最先拿牌的人可以根據(jù)后拿牌的張數(shù)改變,而最開始拿牌的張數(shù)一定要為 3 張。最后一定是后拿牌的人輸。最后一個(gè)題可以用蠻力法。我用的 4 重 for 循環(huán)。每位數(shù)用一個(gè)表示一位整數(shù)表示,再把滿足條件的輸出。
《算法分析與設(shè)計(jì)》實(shí)驗(yàn)報(bào)告 8