ACM程序设计培训总结_acm程序设计培训总结

其他工作总结 时间:2020-02-28 09:44:37 收藏本文下载本文
【www.daodoc.com - 其他工作总结】

ACM程序设计培训总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“acm程序设计培训总结”。

C语言篇

学生信息管理系统 #include “stdio.h” #include “stdlib.h” #define LEN sizeof(struct student)struct student

/*结构体类型*/ { int num;float score;struct student *next;};int n=0;

/*记录链表结点个数*/ struct student *head;

/*链表头指针*/ void menu();

/*DOS菜单函数*/ struct student *creat();

/*链表创建函数*/ void prin(struct student *head);

/*链表输出函数*/ struct student *insert(struct student *head);/*链表添加函数*/ struct student *del(struct student *head);

/*链表删除函数*/ struct student * paixu(struct student *head);/*排序函数*/ struct student *xiugai(struct student *head);/*修改函数*/ void seach();

void menu(){

int i;

printf(“n t 1t创建学生表n”);printf(“n t 2t添加学生数据n”);printf(“n t 3t显示学生信息n”);printf(“n t 4t排序学生记录n”);printf(“n t 5t修改学生记录n”);

printf(“n t 6t删除学生记录n”);

printf(“n t 7t查找学生记录n”);printf(“n t 0t退出n”);

printf(“n t 请输入你的选择(0-4):”);

scanf(“%d”,&i);switch(i){

case 1: head=creat();break;

case 2: head=insert(head);break;

case 3: prin(head);break;

case 4: head=paixu(head);break;

case 5: head=xiugai(head);break;

case 6: head=del(head);break;

case 7: seach();break;

case 0: exit(0);

default:printf(“n选择错误!请按照下面提示选择。”);}

menu();} void main(){

menu();}

struct student *creat()

/*此函数带回一个指向链表头的指针*/ {

struct student *head,*p1,*p2;n=0;head=NULL;p1=(struct student *)malloc(LEN);/*创建第一个结点*/ printf(“请输入第1个学生学号及成绩(学号与成绩以空格隔开,'0 0'结束):”);scanf(“%d%f”,&p1->num,&p1->score);p1->next=NULL;while(p1->num!=0)

/*应该将结点加入链表*/ { ++n;if(n==1)head=p1;

/*是第一个结点,作表头*/ else p2->next=p1;

/*不是第一个结点,作表尾*/ p2=p1;p1=(struct student*)malloc(LEN);/*开辟下一个结点*/ printf(“请输入第%d个学生学号及成绩(学号与成绩以空格隔开,'0 0'结束):”,n+1);scanf(“%d%f”,&p1->num,&p1->score);p1->next=NULL;} free(p1);

/*释放最后一个结点所占的内存*/ return(head);/*返回链表的头指针*/ }

void prin(struct student *head)

/*链表输出函数*/ {

struct student *p;

if(head==NULL)

printf(“链表不存在,请先创建!”);

else

{

p=head;

for(;p!=NULL;)

{

printf(“%d号学生成绩:%fn”,p->num,p->score);

p=p->next;

}

} }

struct student *insert(struct student *head){ struct student*p0,*p1,*p2;int i;char ch='y';p1=head;

/*p1指向第一个结点*/

if(head==NULL)printf(“链表不存在,请先创建!”);else

{

while(ch=='Y'||ch=='y'){ p0=(struct student*)malloc(LEN);

printf(“请输入新结点的数据,输入'0 0'放弃插入:”);

scanf(“%d%f”,&p0->num,&p0->score);p0->next=NULL;

if(p0->num==0)

{ free(p0);

}

else

{ printf(“输入结点插入的位置:”);

scanf(“%d”,&i);

if(i==0)

/*作为表头*/

{

p0->next=head;

head=p0;

}

else

{

while(i>1&&(p1!=NULL))

{

p2=p1;

p1=p1->next;

i--;

}

/*找插入点*/

p0->next=p1;

/*插到p2指向的结点之后*/

p2->next=p0;

}

++n;

/*结点数加1*/

}

printf(“n数据添加成功!是否继续(y或Y继续,任意键退出):”);

getchar();

ch=getchar();} } return(head);}

struct student *del(struct student *head)/*形参num为需删除的学号*/ { int i;

char ch='y';struct student *p1,*p2;

while(ch=='Y'||ch=='y'){ if(head==NULL){ printf(“n链表不存在!n”);break;

/*链表为空*/ } else {

p1=head;

/*从头结点开始查找*/

printf(“请输入要删除的学生学号:”);

scanf(“%d”,&i);

getchar();

while(i!=p1->num&&p1->next!=NULL)

/*p1指向的不是所要找的结点,并且没有到表尾*/

{

p2=p1;

p1=p1->next;

/*后移一个结点*/

}

if(i==p1->num)

/*找到了需删除的结点*/

{

if(p1==head)

/*p1指向的是头结点*/

head=p1->next;/*第二个结点成为新的头结点*/

else

p2->next=p1->next;/*后继结点的地址赋给前一结点*/

printf(“%d号学生已经被删除n”,i);

free(p1);

/*释放结点所占的内存*/

n--;

/*链表结点数减1*/

printf(“n数据删除成功!是否继续(y或Y继续,任意键退出):”);

ch=getchar();

}

else

{

printf(“%d 号学生不存在或已经被删除!n”,i);/*找不到删除结点*/

printf(“n是否继续(y或Y继续,任意键退出):”);

ch=getchar();

} }

}

return(head);}

struct student * paixu(struct student *head)

/*排序函数*/ {

struct student *p0,*p1,*p2,*pt;

/*p0代表p1的前个结点*/

/*p1代表当前正排序的结点*/

/*p2用来取p1后面的每个结点来与P1比较*/ int i;

/*i=1表示头结点排序*/ if(head==NULL)

{

printf(“链表不存在,先创建!n”);

}

else if(n>1)

{

p0=p2=p1=head;

for(i=1;p1->next!=NULL;i++)

/*选择法排序算法*/

{

for(;p2->next!=NULL;)

if(p1->num>p2->next->num)

{

pt=p1;

p1=p2->next;

p2->next=p1->next;

p1->next=pt;

}

else p2=p2->next;

/*若不要交换,则p2指针后移*/

if(i==1)p0=head=p1;

/*对第一个结点排序时处理*/

else

/*其他结点排序时处理*/

{ p0->next=p1;

p0=p1;

}

p2=p1->next;

p1=p1->next;

}

prin(head);

/*调用输出函数*/

}

return(head);}

struct student *xiugai(struct student *head)

/*修改函数*/ { struct student *p;

int m;

printf(“n请输入要修改数据的学号(0退出):”);

scanf(“%d”,&m);

while(m!=0)

{ p=head;

for(;p->num!=m&&p->next!=NULL;)

p=p->next;

if(p->num==m)

{ printf(“n请输入新的数据(学号 成绩):”);

scanf(“%d%f”,&p->num,&p->score);

printf(“n修改成功!”);

printf(“n若继续修改,请输入学号(0退出):”);

}

else

printf(“n该学生不存在,请重新输入学号(0退出):”);

scanf(“%d”,&m);

}

return(head);}

void xuehao(struct student *head)

/*按学号查找函数*/ { struct student *p;

int m,leap;

printf(“n请输入要查找的学号:”);

scanf(“%d”,&m);

while(m!=0)

{ p=head;

leap=0;

for(;p->next!=NULL;)

{

if(p->num==m)

{printf(“n你要查找的学生信息为: 学号 %d 成绩 %fn”,p->num,p->score);

leap=1;

}

p=p->next;

}

if(leap==1)

printf(“n若继续查找,请输入学号(0退出):”);

else

printf(“n该学生不存在,请重新输入学号(0退出):”);

scanf(“%d”,&m);

}

}

void chengji(struct student *head)

/*按成绩查找函数*/ { struct student *p;

int leap;

float m;

printf(“n请输入要查找的成绩:”);

scanf(“%f”,&m);

while(m>=0)

{ p=head;

leap=0;

for(;p->next!=NULL;)

{

if(p->num==m)

{printf(“n你要查找的学生信息为: 学号 %d 成绩 %fn”,p->num,p->score);

leap=1;

}

p=p->next;

}

if(leap==1)

printf(“n若继续查找,请输入成绩(负数退出):”);

else

printf(“n该学生不存在,请重新输入成绩(负数退出):”);

scanf(“%f”,&m);

}

}

void seach()

/*查找子菜单*/ {

int i;

printf(“n t 1 按学号查找n”);printf(“n t 2 按成绩查找n”);printf(“n t 0 返回上级菜单n”);printf(“n t

请输入你的选择:”);scanf(“%d”,&i);switch(i){

case 1: xuehao(head);break;

case 2: chengji(head);break;

case 0: menu();break;

default:printf(“n选择错误!请按照下面提示选择。”);} seach();}

数据结构篇

//huffman.cpp 求Huffman编码 #define UNIT_MAX 65535

//函数结果状态代码

#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0

#define INFEASIBLE-1 #define OVERFLOW-2

#include #include #include #include

//Status 是函数的类型,其值是函数结果状态代码 typedef int Status;

//Huffman树&Huffman编码的存储表示

typedef struct{ unsigned int weight;unsigned int parent,lchild,rchild;}HTNode,*HuffmanTree;//动态分配数组存储Huffman树 typedef char **HuffmanCode;/* int min(HuffmanTree t,int i){ //函数void select()调用

int j,flag;unsigned int k=UNIT_MAX;for(j=1;j

if(t[j].weight

{

k=t[j].weight;

flag=j;

} t[flag].parent=1;

return flag;}

void select(HuffmanTree t,int i,int &s1,int &s2){ //s1为最小的两个值中序号小的那个

int j;s1=min(t,i);s2=min(t,i);if(s1>s2){

j=s1;

s1=s2;

s2=j;} } */

void select(HuffmanTree t,int i,int &s1,int &s2){ int j;s1=0;s2=0;

unsigned int small1,small2;

small1=UNIT_MAX;small2=UNIT_MAX;

for(j=1;j

//选出两个权值最小的根结点

{

if(t[j].parent==0)

if(t[j].weight

{

small2=small1;

//改变最小权、次小权及对应的位置

small1=t[j].weight;

s2=s1;

s1=j;

}

else

{

if(t[j].weight

{

small2=t[j].weight;//改变次小权及位置

s2=j;

}

} } }

void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n){ // 算法6.12 // w存放n个字符的权值(均>0),构造哈夫曼树HT,// 并求出n个字符的哈夫曼编码HC int m,i,s1,s2;unsigned c,cdlen;

HuffmanTree p;char *cd;

if(n

It's still a simple game, isn't it? But after you've written down the 2n numbers, can you tell me in how many different ways can you connect the numbers into pairs? Life is harder, right? 卡特勒数

import java.math.*;import java.util.*;public cla Main{

public static void main(String args[])

{

Scanner as=new Scanner(System.in);

int n,i;

BigDecimal[] a=new BigDecimal[101];

a[0]=BigDecimal.valueOf(1);

for(i=1;i

{

a[i]=a[i-1].multiply(BigDecimal.valueOf(4*i-2));

a[i]=a[i].divide(BigDecimal.valueOf(i+1));

}

while(i>0)

{

n=as.nextInt();

if(n==-1)

break;

System.out.println(a[n]);

}

} }

筛选法 七夕节

除了筛选素数外,还能筛选因子(倍数的运用)#include #define max 500000 int a[max+1]={0};int main(){ int t,n,i,j;a[0]=a[1]=0;for(i=1;i

for(j=i+i;j

a[j]+=i;

scanf(“%d”,&t);

while(t--)

{

scanf(“%d”,&n);

printf(“%dn”,a[n]);

}

return 0;}

母函数

Ignatius and the Prince III

“Well, it seems the first problem is too easy.I will let you know how foolish you are later.” feng5166 says."The second problem is, given an positive integer N, we define an equation like this: N=a[1]+a[2]+a[3]+...+a[m];a[i]>0,1

#include using namespace std;const int lmax=10000;int c1[lmax+1],c2[lmax+1];int main(){

int n,i,j,k;

while(cin>>n)

{

for(i=0;i

{

c1[i]=0;

c2[i]=0;

}

for(i=0;i

c1[i]=1;

for(i=2;i

{

for(j=0;j

for(k=0;k+j

{

c2[j+k]+=c1[j];

}

for(j=0;j

{

c1[j]=c2[j];

c2[j]=0;

}

}

cout

}

return 0;} 贪心算法(排序函数)#incluide Int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;} Qsort(a[0],n,sizeof(a[0]),cmp);

acm程序设计竞赛策划书

ACM程序设计大赛策划书一、目的和意义为提高我院学生的创造力、团队精神以及在程序设计和软件开发中的能力.二、承办单位计算机科学学院acm协会三、比赛时间报名时间:比赛时......

ACM程序设计大赛策划书

ACM程序设计大赛策划书一、目的和意义为提高我校学生的创造力、团队精神以及在程序设计和软件开发中的能力,同时选拔优秀的选手代表我校参加 广东省大学生程序设计大赛(ACM)。......

ACM赛后总结

赛后总结虽然已经是大二第二学期了,这却是我的第一真正的ACM比赛经历,赛后感觉自己水平很差,感觉很不好,或许只有受到了了打击,才会有成长,也只有在一次次的打击中吸取经验,成为自......

ACM

Dijkstra 模板/*************************************** * About:有向图的Dijkstra算法实现 * Author:Tanky Woo * Blog:www.daodoc.com ********************************......

以ACM竞赛驱动程序设计类专业课教学改革

摘要:从分析当前高校在程序设计类专业课程教学中存在的问题及问题产生的原因出发,阐述利用acm竞赛来促进计算机专业教学体系特别是程序设计类课程的教学改革。在调研acm竞赛模......

下载ACM程序设计培训总结word格式文档
下载ACM程序设计培训总结.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文