LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3569|回复: 14

求算法思想。。。。谢谢各位了!

[复制链接]
发表于 2003-6-25 22:52:20 | 显示全部楼层 |阅读模式
1、 运动会分数统计**
任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
功能要求:1).可以输入各个项目的前三名或前五名的成绩;
2).能统计各学校总分,
3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:有中文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
2、 一元多项式计算**
任务:能够按照指数降序排列建立并输出多项式;
能够完成两个多项式的相加、相减,并将结果输入;
在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图) 、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
3、 订票系统
任务:通过此系统可以实现如下功能:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
订票:(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;

4、 迷宫求解
任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;
要求:
在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
5、 文章编辑**
功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;

6、 joseph环
任务:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。
要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
测试数据:
m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?
要求:
输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。
输出形式:建立一个输出函数,将正确的输出序列

7、 猴子选大王**
任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:
输入数据:输入m,n m,n 为整数,n<m
输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能

8、 建立二叉树,层序、先序遍历( 用递归或非递归的方法都可以)**
任务:
要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;

9、 赫夫曼树的建立
任务 :建立建立最优二叉树函数
要求:可以建立函数输入二叉树,并输出其赫夫曼树
在上交资料中请写明:存储结构、 基本算法(可以使用程序流程图) 、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
10、 纸牌游戏**
任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的 直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些?
11、图的建立及输出
任务:建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。
要求:
12、拓扑排序
任务:编写函数实现图的拓扑排序。
13、 各种排序
任务:用程序实现插入法排序、起泡法改进算法排序;
利用插入排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。
输入的数据形式为任何一个正整数,大小不限。
输出的形式:数字大小逐个递增的数列?



一共13个题目,各位能想出哪个来,写出哪个。不胜感激啊!!!:help
发表于 2003-6-26 09:46:30 | 显示全部楼层
第一道题实际上是在设计一个小型数据库。工作量有点大的说。估计老师是让你任选一道题,不会让你全做的吧。
我来说说我的思路吧:
首先解决数据存储问题,应该是用链表。要定义一个结构,也就是链表结点,包括:项目编号、男/女、名次、积分、学校编号。以后输入和删除数据就是链表的插入和删除了。接下来的统计和查询,也是数据结构的问题。不过,由于数据规模小,完成一次遍历用什么方法都可以了。排序输出时,可以先把数据输入到缓冲区中排序后再输出。界面嘛,就自行处理好了。
 楼主| 发表于 2003-6-26 09:57:03 | 显示全部楼层
唉。。。破老师让我们竟然全做。可是我就是没辙,各位给帮帮了。
发表于 2003-6-26 11:19:00 | 显示全部楼层
如果你是计算机专业的话,这样的题目很正常的。可以说非常简单的作业。
发表于 2003-6-26 12:08:08 | 显示全部楼层
做一道"猴子选大王"吧:
这道题目是一个单链表循环删除节点的问题:

  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. struct Node {
  4.         int data;
  5.         struct Node *next;
  6. };

  7. int main()
  8. {
  9.         struct Node *head, *s, *q, *t;
  10.         int n, m, count=0, i;
  11.         printf("input the number m:");
  12.         scanf("%d",&m);
  13.         printf("\ninput the number n:");
  14.         scanf("%d",&n);

  15.         for(i=0; i<m; i++) {
  16.                 s=(struct Node *)malloc(sizeof(struct Node));
  17.                 s->data=i+1;
  18.                 s->next=NULL;
  19.                 if(i==0) {
  20.                         head=s;
  21.                         q=head;
  22.                 }
  23.                 else {
  24.                         q->next=s;
  25.                         q=q->next;
  26.                 }
  27.         }
  28.         q->next=head;

  29.         printf("before:");
  30.         q=head;
  31.         while(q->next!=head) {
  32.                 printf("%d ",q->data);
  33.                 q=q->next;
  34.         }
  35.         printf("%d \n",q->data);

  36.         q=head;
  37.         printf("\n");
  38.         do {
  39.                 count++;
  40.                 if(count==n-1) {
  41.                         t=q->next;
  42.                         q->next=t->next;
  43.                         count=0;
  44.                         printf("%d ", t->data);
  45.                         free(t);
  46.                 }
  47.                 q=q->next;
  48.         }while(q->next!=q);
  49.         printf("\nthe king is: %d\n",q->data);
  50. }
复制代码

运行结果:
[kj501@c4 kj501]$ gcc -g king.c
[kj501@c4 kj501]$ ./a.out
input the number m:10

input the number n:5
before:1 2 3 4 5 6 7 8 9 10

5 10 6 2 9 8 1 4 7
the king is: 3
[kj501@c4 kj501]$
很简单的,不过数据结构我没有学过,应该找机会好好补习一下。
 楼主| 发表于 2003-6-26 22:37:45 | 显示全部楼层
首先很感谢大家啊。
我不是一个计算机专业的学生。
我是学电子商务的。
发表于 2003-6-26 23:19:38 | 显示全部楼层
既然是学电子商务的,那么你的老师出这种题目干嘛?难道你们要学数据结构?
发表于 2003-6-27 02:28:15 | 显示全部楼层
现在都有“电子商务”专业了?不是 e-Commerce 的说?
发表于 2003-6-27 21:28:57 | 显示全部楼层

这个呢?

猴子的问题

  1. main()
  2. {int *point;
  3. static int monkey[100];
  4. int m,n;
  5. int i;
  6. point=&monkey[0];
  7. printf("input:\nnumber of the monkeys=");
  8. scanf("%d",&m);
  9. printf("number to count=");
  10. scanf("%d",&n);
  11. count(point,m,n);
  12. for(i=1;i<=m;i++)
  13.    {if (monkey[i]==0)
  14.    printf("the king is no.%d.\n",i);
  15.    }
  16. }
  17. count(p,m,n)
  18. int *p;
  19. int m,n;
  20. {
  21. int i,record,time;
  22. for(i=1,record=0,time=0;time<m-1;time++,record=0)
  23. {for(;record<n;i++)
  24.      {if(i==(m+1)) i=1;
  25.      if(*(p+i)==0) record++;
  26.      }
  27. *(p+i-1)=1;
  28. }
  29. }
复制代码
发表于 2003-6-27 21:36:09 | 显示全部楼层

我来做二叉树的那道

  1. #include <stdio.h>
  2. #define NUM 10
  3. struct node{
  4. int data;
  5. struct node *lchild;
  6. struct node *rchild;
  7. };
  8. void make(struct node **boot,int a[]);
  9. void middle(struct node *boot);
  10. void left(struct node *boot);
  11. main()
  12. {
  13. int a[NUM]={6,16,81,61,65,8,71,6,89,63};
  14. int i;
  15. struct node *boot=NULL;
  16. for(i=0;i<NUM;i++)
  17. printf("%5d",a[i]);
  18. printf("\n");
  19. make(&boot,a);
  20. middle(boot);
  21. printf("\n");
  22. left(boot);
  23. printf("\n");
  24. }
  25. void make(struct node **boot,int a[])                //生成二叉树
  26. {
  27. struct node *p,*leave;
  28. int i;
  29. for(i=0;i<NUM;i++)
  30.         {
  31.         p=(struct node *)malloc(sizeof(struct node));
  32.         p->data=a[i];p->lchild=NULL;p->rchild=NULL;
  33.         leave=*boot;
  34.         if(*boot==NULL) *boot=p;
  35.         else
  36.         {
  37.         while((leave->lchild!=p)&&(leave->rchild!=p))//找到适合二叉树插入的叶子结点
  38.                 {
  39.                 if(leave->data>p->data)
  40.                         if(leave->lchild==NULL) leave->lchild=p;
  41.                         else   leave=leave->lchild;
  42.                 else
  43.                         if(leave->rchild==NULL)  leave->rchild=p;
  44.                         else  leave=leave->rchild;
  45.                 }
  46.         }
  47.         }
  48. }
  49. void middle(struct node *boot)                //中序遍历
  50. {
  51. if(boot!=NULL)
  52. {
  53.         middle(boot->lchild);
  54.         printf("%5d",boot->data);
  55.         middle(boot->rchild);
  56.         }
  57. }
  58. void left(struct node *boot)                //前序遍历
  59. {
  60. if(boot!=NULL)
  61. {
  62.         printf("%5d",boot->data);
  63.         left(boot->lchild);
  64.         left(boot->rchild);
  65.         }
  66. }
复制代码
生成的二叉树为:
  1.                   6
  2.                    \
  3.                    16
  4.                   /  \
  5.                  8    81
  6.                 /    /  \
  7.                 6   61   89
  8.                      \
  9.                      65
  10.                     /  \
  11.                    63   71
复制代码
[root@localhost tmp]# gcc firth.c
[root@localhost tmp]# ./a.out
    6   16   81   61   65    8   71    6   89   63
    6    6    8   16   61   63   65   71   81   89
    6   16    8    6   81   61   65   63   71   89
那个什么环的。每个同学带的密码没有提供的吗?如果没有的话,怎么得到?
纸牌的那个,随便用个循环不就行了吗?迷宫的那个我就真的更不懂了。因为我不知道你要创造的迷宫是有什么规定,如何造。
ralphlee以后贴代码要记得用置顶贴子说明的方法。
               
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表