算法设计实验题目汇总Word文档下载推荐.docx

上传人:b****4 文档编号:13743450 上传时间:2022-10-13 格式:DOCX 页数:57 大小:39.33KB
下载 相关 举报
算法设计实验题目汇总Word文档下载推荐.docx_第1页
第1页 / 共57页
算法设计实验题目汇总Word文档下载推荐.docx_第2页
第2页 / 共57页
算法设计实验题目汇总Word文档下载推荐.docx_第3页
第3页 / 共57页
算法设计实验题目汇总Word文档下载推荐.docx_第4页
第4页 / 共57页
算法设计实验题目汇总Word文档下载推荐.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

算法设计实验题目汇总Word文档下载推荐.docx

《算法设计实验题目汇总Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《算法设计实验题目汇总Word文档下载推荐.docx(57页珍藏版)》请在冰豆网上搜索。

算法设计实验题目汇总Word文档下载推荐.docx

1062ProblemDGeneralSearch38

1020PermutationwithRepetition

Description

R={r1,r2,…,rn}是要进行排列的n个元素。

其中元素r1,r2,…,rn可能相同。

试设计一个算法,列出R的所有不同排列。

编程任务:

给定n以及待排列的n个元素。

计算出这n个元素的所有不同排列。

Input

输入由多组测试数据组成。

每组测试数据的第1行是元素个数n,1<

=n<

=500。

接下来的1行是待排列的n个元素。

Output

对应每组输入,将计算出的n个元素的所有不同排列输出,每种排列单独一行。

最后1行中的数是排列总数。

SampleInput

4

aacc

SampleOutput

aaccacacaccacaaccacaccaa6

#include<

stdio.h>

algorithm>

usingnamespacestd;

intans;

intok(charstr[],inta,intb)

{

if(b>

a)

for(inti=a;

i<

b;

i++)

if(str[i]==str[b])

return0;

return1;

}

voidperm(charstr[],intk,intm)

inti;

if(k==m)

{

ans++;

for(i=0;

i<

=m;

i++)

printf("

%c"

str[i]);

}

\n"

);

else

for(i=k;

i<

i++)

if(ok(str,k,i))

swap(str[k],str[i]);

perm(str,k+1,m);

swap(str[k],str[i]);

intmain(intargc,char*argv[])

charstr[1000];

intn;

while(scanf("

%d"

&

n)!

=EOF)

ans=0;

scanf("

%s"

str);

perm(str,0,n-1);

%d\n"

ans);

return0;

1021双色Hanoi塔问题

A、B、C是3个塔座。

开始时,在塔座A上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。

各圆盘从小到大编号为1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。

现要求将塔座A上的这一叠圆盘移到塔座B上,并仍按同样顺序叠置。

在移动圆盘时应遵守以下移动规则:

规则

(1):

每次只能移动1个圆盘;

规则

(2):

任何时刻都不允许将较大的圆盘压在较小的圆盘之上;

规则(3):

任何时刻都不允许将同色圆盘叠在一起;

规则(4):

在满足移动规则

(1)-(3)的前提下,可将圆盘移至A,B,C中任一塔座上。

试设计一个算法,用最少的移动次数将塔座A上的n个圆盘移到塔座B上,并仍按同样顺序叠置。

对于给定的正整数n,编程计算最优移动方案。

每组测试数据的第1行是给定的正整数n。

对应每组输入,输出的每一行由一个正整数k和2个字符c1和c2组成,表示将第k个圆盘从塔座c1移到塔座c2上。

3

1AB

2AC

1BC

3AB

1CA

2CB

iostream>

usingnamespacestd;

intmain()

{voidhanoi(int,char,char,char);

intm;

cin>

>

m;

hanoi(m,'

A'

'

B'

C'

);

}

voidhanoi(intn,chara,charb,charc)

{voidmove(int,char,char);

if(n==1)move(n,a,b);

else

{hanoi(n-1,a,c,b);

move(n,a,b);

hanoi(n-1,c,b,a);

}

voidmove(intn,charx,chary)

{cout<

<

n<

"

x<

<

y<

endl;

1022SearchNumber

科研调查时得到了n个自然数,每个数均不超过1500000000。

已知不相同的数不超过10000个,现在需要在其中查找某个自然数,如找到则输出并统计这个自然数出现的次数,如没找到则输出NO。

每组测试数据输入包含n+1行;

第一行是两个整数n和x,n表示自然数的个数,x表示要查找的自然数,两者之间用空格隔开;

第2至n+1每行一个自然数。

对应每组输入,如果查找到x,则每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开;

如果没有查找到x,则每行输出NO.

8100

2

5

100

83

1002

NO

#include<

string.h>

#defineLEN200000

inta[LEN],temp,mid;

intsort(int*a,intlow,inthigh)//一趟快排

{

mid=a[low];

while(low<

high)

high&

&

a[high]>

=mid)high--;

temp=a[low];

a[low]=a[high];

a[high]=temp;

a[high]<

=mid)low++;

returnlow;

voidquicksort(int*a,intlow,inthigh)//快排递归

//intmid;

if(low<

high)

mid=sort(a,low,high);

quicksort(a,low,mid-1);

quicksort(a,mid+1,high);

inti,n,s;

intSum=0;

scanf("

n);

s);

for(i=0;

i<

n;

i++)

{scanf("

a[i]);

quicksort(a,0,n-1);

//调用快排

i++)//统计不同数字的个数

if(a[i]==s)

Sum++;

if(Sum==0)

NO"

else

%d%d"

s,Sum);

1023整数划分问题

将正整数n表示成一系列正整数之和:

n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。

正整数n的这种表示称为正整数n的划分。

求正整数n的不同划分个数。

例如正整数6有如下11种不同的划分:

6;

5+1;

4+2,4+1+1;

3+3,3+2+1,3+1+1+1;

2+2+2,2+2+1+1,2+1+1+1+1;

1+1+1+1+1+1。

输入包含n+1行;

第一行是一个整数n,表示有n个测试用例;

第2至n+1每行一个正整数。

对应每组输入,输出正整数n的不同划分个数。

6

7

11

intsplit(intn,intm)

if(n<

1||m<

1)return0;

if(n==1||m==1)return1;

m)returnsplit(n,n);

if(n==m)return(split(n,m-1)+1);

if(n>

m)return(split(n,m-1)+split((n-m),m));

intmain()

intk,i;

inta[100];

k);

for(i=0;

k;

split(a[i],a[i]));

1024ProblemA:

Counting

问题描述:

一本书的页码从自然数1开始顺序编码直到自然数n。

书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。

例如,第6页用数字6表示,而不是06或006等。

数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。

给定表示书的总页码的10进制整数n(1≤n≤109)。

编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。

每组测试数据输入只有1行,给出表示书的总页码的整数n。

对应每组输入,输出共有10行,在第k行输出页码中用到数字k-1的次数,k=1,2,…,10。

S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1