鸽笼原理,C语言编程。用C不要C++

答案发到邮箱 [email protected] 必有重谢

一、题目:序列小游戏
二、目的与要求
1. 目的:
(1)让学生体会到鸽巢原理(或抽屉原理)的乐趣并使学生更加系统地理解和掌握C语言的函数间参数传递方法、数组和指针的应用等编程技巧。培养学生综合利用C语言进行科学计算,使学生将所学知识转化为分析和设计简单实际问题的能力,学会查资料和工具书。
(2)提高学生建立程序文档、归纳总结的能力。
2. 基本要求:
(1)要求用C语言编程,在Visual C++环境下调试完成;
(2)要求按照程序功能分成几个功能模块来实现,各个功能模块分别使用函数来完成;
(3)要求应用本课所讲授的程序设计语言知识来解决问题.

三、设计方法和基本原理
1. 课题功能描述
任意给定5个数字,其中必定存在3个数字已经有序(或者升序,或者降序),找出这5个数字中最长的升序或降序序列。
例如:1,7,5,3,9。则{1,7,9},{1,5,9},{1,3,9}都是最长的升序序列;
而{7,5,3}是最长的降序序列。
再如:1,3,2,5,7。最长的升序序列为{1,3,5,7}和{1,2,5,7}。
2. 问题的解决方案:
自动生成各种可能的序列,对于5个数字所有可能的序列为:
{0,1,2,3}、{0,1,2,4}、{0,1,3,4}、{0,2,3,4}、{1,2,3,4}
{0,1,2}、{0,1,3}、{0,2,3}、{1,2,3}
{0,1,4}、{0,2,4}、{1,2,4}
{1,3,4}
{2,3,4}、{0,3,4}
考察各种可能的序列是否升序或是降序,若是则打印;
四、创新要求
在基本要求达到后,进行创新设计,10个数据,必定会有至少4个数据已经有序(或升序或降序),找出最长的升序或降序序列。

第1个回答  2010-07-09
#include<stdio.h>
#define M 5
int a[M],b[M],len=-1,sign=0;
void dfs(int n,int mark)
{
int i,flag;
if(n==0)
{
flag=1;
for(i=1;i<len;i++)
if((b[i-1]<b[i])!=(b[i]<b[i+1]))
{
flag=0;
break;
}
if(flag==1)
{
sign=1;
for(i=0;i<=len;i++)
printf("%d",b[i]);
printf("\n");
}
}
else
if(M-mark>n)
{
len++;
b[len]=a[mark];
dfs(n-1,mark+1);
b[len]=0;
len--;
dfs(n,mark+1);
}
else
{
len++;
b[len]=a[mark];
dfs(n-1,mark+1);
b[len]=0;
len--;
}
}
void main()
{
int i;
for(i=0;i<M;i++)
scanf("%d",&a[i]);
for(i=M;sign==0;i--)
dfs(i,0);
}
第2个回答  2010-07-05
这个 题目 如果 我写了 你也 不一定 回采纳...要先说好才行....不然 写了半天白写了...本回答被提问者采纳
第3个回答  2010-07-03
这样的作业题,先自己思考,然后把程序发上来大家帮你修改还好点
第4个回答  2010-07-13
举例:
如果给你4个苹果,让你把他们放在3个抽屉里,那么可以肯定有一个抽屉至少有两个苹果
第5个回答  2010-07-06
写代码是要花时间的,写好后不不采纳,不白费自己的劳动啦!!!
相似回答