@wpaladins
2016-04-08T07:51:49.000000Z
字数 9678
阅读 2062
代码
本页面由王旭升(wpaladins)编写,转载请注明出处即可,无需申请!
目录
A
#include<stdio.h> //A#include<string.h>struct xg{int xi;int ui;}a[10000],b[10000];int main(){int i,j,n=0,m=0;int sum[10000];memset(sum,0,sizeof(sum));while(1){scanf("%d%d",&a[n].xi,&a[n].ui);if(a[n++].ui==-1)break;}while(1){scanf("%d%d",&b[m].xi,&b[m].ui);if(b[m++].ui==-1)break;}for(i=0;i<n-1;i++){for(j=0;j<m-1;j++){sum[a[i].ui+b[j].ui]+=a[i].xi*b[j].xi;}}int flag=0;for(i=9999;i>=0;i--){if(sum[i]){printf("%d %d ",sum[i],i);flag=1;}}if(flag==0)printf("0\n");return 0;}
B
代码2运用数学归纳法,由五班大神施维提供:
#include<stdio.h> //B#include<string.h>int main(){int m,n,t,M;int a[10001];while(~scanf("%d%d",&m,&n)&&m&&n){memset(a,0,sizeof(a));M=m-1;int i=1;while(M--){t=0;for(;;i++){if(!a[i]){t++;}if(t==n){a[i]=1;break;}if(i==m){i=0;}}}for( i=1;i<=m;i++){if(a[i]==0){printf("%d\n",i);break;}}}return 0;}
代码2
#include<stdio.h>int main (){int s,n,i,m;while((scanf("%d%d",&n,&m))&&n&&m){s=0;for(i=2;i<=n;i++){s=(s+m)%i;}printf("%d\n",s+1);}return 0;}
C
#include<stdio.h>#include<string.h>struct xg{int xi;int ui;}a[10000],b[10000];int main(){int i,j,n=0,m=0;int sum[10000];memset(sum,0,sizeof(sum));while(1){scanf("%d%d",&a[n].xi,&a[n].ui);if(a[n++].ui==-1)break;}while(1){scanf("%d%d",&b[m].xi,&b[m].ui);if(b[m++].ui==-1)break;}for(i=0;i<n-1;i++){sum[a[i].ui]+=a[i].xi;}for(j=0;j<m-1;j++){sum[b[j].ui]+=b[j].xi;}int flag=0;for(i=9999;i>=0;i--){if(sum[i]){printf("%d %d ",sum[i],i);flag=1;}}if(flag==0)printf("0\n");return 0;}
D有
代码2版本
#include<stdio.h> //D#include<string.h>int main(){int i,j,m,n;int a[210],b[210]; //数组,所以是线性表;while(~scanf("%d",&m)) //用第一个输入的数据在while中的方法达到输入多组数据的效果,注意写法;{for(i=0;i<m;i++){scanf("%d",&a[i]); //为数组a的每个元素赋值;}scanf("%d",&n); //数组b的大小for(i=0;i<n;i++){scanf("%d",&b[i]); //为数组b的每个元素赋值;}printf("%d",a[0]); //从此开始的八行,按照体重要求打印一次数组a和b,但是由于空格的问题,就必须将第一个数据单独打出,剩下的数据以" %d"的形式打出;for(i=1;i<m;i++)printf(" %d",a[i]);printf("\n");printf("%d",b[0]);for(i=1;i<n;i++)printf(" %d",b[i]);printf("\n");for(i=0;i<n;i++) //用i来遍历b;{int t=0;for(j=0;j<m;j++) //用i来遍历a;{if(a[j]==b[i]){t=1;break;}}if(t==0){a[m++]=b[i]; //先将b[i]的值赋给a[m],然后m++;}printf("%d",a[0]); //从此开始的四行,是为了将数组在每次加完一个数之后输出;for(j=1;j<m;j++)printf(" %d",a[j]);printf("\n");}printf("\n"); //按照题目要求,每组数据之间换行;}return 0;}
代码2
#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 201typedef int Status;typedef int ElemType;Status visit(ElemType c){printf(" %d",c);return OK;}typedef struct{ElemType data[MAXSIZE];int length;}SqList;Status InitList(SqList *L){L->length=0;return OK;}Status ListEmpty(SqList L){if(L.length==0)return TRUE;elsereturn FALSE;}Status ClearList(SqList *L){L->length=0;return OK;}int ListLength(SqList L){return L.length;}Status GetElem(SqList L,int i,ElemType *e){if(L.length==0 || i<1 || i>L.length)return ERROR;*e=L.data[i-1];return OK;}int LocateElem(SqList L,ElemType e){int i;if (L.length==0)return 0;for(i=0;i<L.length;i++){if (L.data[i]==e)break;}if(i>=L.length)return 0;return i+1;}Status ListInsert(SqList *L,int i,ElemType e){int k;if (L->length==MAXSIZE)return ERROR;if (i<1 || i>L->length+1)return ERROR;if (i<=L->length){for(k=L->length-1;k>=i-1;k--)L->data[k+1]=L->data[k];}L->data[i-1]=e;L->length++;return OK;}Status ListDelete(SqList *L,int i,ElemType *e){int k;if (L->length==0)return ERROR;if (i<1 || i>L->length)return ERROR;*e=L->data[i-1];if (i<L->length){for(k=i;k<L->length;k++)L->data[k-1]=L->data[k];}L->length--;return OK;}void ListTraverse(SqList L){int i;printf("%d", L.data[0]);for(i=1;i<L.length;i++)visit(L.data[i]);printf("\n");}void unionL(SqList *La,ElemType c){int La_len,i;La_len=ListLength(*La);if (!LocateElem(*La,c))ListInsert(La,++La_len,c);}int main(){SqList La, Lb;InitList(&La);InitList(&Lb);int m, n, i, num, Lb_len;while(scanf("%d", &m) != EOF){for(i = 0;i < m; i++){scanf("%d", &num);ListInsert(&La, i+1, num);}scanf("%d", &n);for(i = 0;i < n; i++){scanf("%d", &num);ListInsert(&Lb, i+1, num);}Lb_len=ListLength(Lb);ListTraverse(La);ListTraverse(Lb);ElemType e;for(i = 1; i <= Lb_len; i++){GetElem(Lb,i,&e);unionL(&La, e);ListTraverse (La);}printf("\n");ClearList(&La);ClearList(&Lb);}}
E
#include<stdio.h> //E#include<string.h>int main(){int i,n,m;int a[101],b[101],z[202];int p=0,q=0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}scanf("%d",&m);for(i=0;i<m;i++){scanf("%d",&b[i]);}if(a[0]>b[0]){z[0]=b[0];q=1;}else{z[0]=a[0];p=1;}printf("%d ",z[0]);for(i=1;i<m+n;i++){if(p==n&&q==m)break;if(a[p]<b[q]){if(p<n)z[i]=a[p++];elsez[i]=b[q++];}else{if(q<m)z[i]=b[q++];elsez[i]=a[p++];}printf("%d",z[i]);if(i!=m+n-1)printf(" ");}return 0;}
F
#include <stdio.h>#include <stdlib.h>#include <string.h>#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量#define LISTINCREMENT 10 // 线性表存储空间的分配增量typedef int Status; // 定义返回值状态类型#define OK 1#define ERROR 0typedef struct{ // 定义数据类型,存放的是一个名字,所以只有字符数组char name[100];}ElemType;typedef struct{ElemType * elem; // 存储空间基址int length; // 当前长度int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)}SqList;Status InitList_Sq(SqList *L) { // 算法2.3// 构造一个空的线性表L。L->elem = (ElemType *) malloc(LIST_INIT_SIZE*sizeof(ElemType));if (!L->elem)return OK; // 存储分配失败L->length = 0; // 空表长度为0L->listsize = LIST_INIT_SIZE; // 初始存储容量return OK;} // InitList_SqStatus ListInsert_Sq(SqList *L, int i, ElemType e) { // 算法2.4// 在顺序线性表L的第i个元素之前插入新的元素e,// i的合法值为1≤i≤ListLength_Sq(L)+1ElemType *p;if (i < 1 || i > L->length + 1)return ERROR; // i值不合法if (L->length >= L->listsize) { // 当前存储空间已满,增加容量ElemType *newbase = (ElemType *) realloc(L->elem, (L->listsize+ LISTINCREMENT) * sizeof(ElemType));if (!newbase)return ERROR; // 存储分配失败L->elem = newbase; // 新基址L->listsize += LISTINCREMENT; // 增加存储容量}ElemType *q = &(L->elem[i - 1]); // q为插入位置for (p = &(L->elem[L->length - 1]); p >= q; --p)*(p + 1) = *p;// 插入位置及之后的元素右移*q = e; // 插入e++L->length; // 表长增1return OK;} // ListInsert_SqStatus ListDelete_Sq(SqList *L, int i, ElemType *e) { // 算法2.5// 在顺序线性表L中删除第i个元素,并用e返回其值。// i的合法值为1≤i≤ListLength_Sq(L)。ElemType *p, *q;if (i < 1 || i > L->length)return ERROR; // i值不合法p = &(L->elem[i - 1]); // p为被删除元素的位置*e = *p; // 被删除元素的值赋给eq = L->elem + L->length - 1; // 表尾元素的位置for (++p; p <= q; ++p)*(p - 1) = *p; // 被删除元素之后的元素左移--L->length; // 表长减1return OK;} // ListDelete_Sqint LocateElem_Sq(SqList L, ElemType e, Status(*compare)(ElemType, ElemType)) { // 算法2.6// 在顺序线性表L中查找第1个值与e满足compare()的元素的位序。// 若找到,则返回其在L中的位序,否则返回0。int i;ElemType *p;i = 1; // i的初值为第1个元素的位序p = L.elem; // p的初值为第1个元素的存储位置while (i <= L.length && !(*compare)(*p++, e))++i;if (i <= L.length)return i;elsereturn 0;} // LocateElem_Sqvoid ListShow(SqList L){// 将顺序表中的所有元素都显示出来,每个姓名之间用空格分开int i;for(i=0;i<L.length;i++){if(i){ // 用来判断是否需要输出空格putchar(' ');}printf("%s", L.elem[i].name); // 输出姓名}putchar('\n'); // 注意最后需要换行}Status cmp(ElemType e1, ElemType e2){// 用来比较两个ElemType元素是否相等return (Status)!strcmp(e1.name, e2.name);}int main(){SqList namelist; // 定义姓名列表InitList_Sq(&namelist); // 初始化姓名列表char strInstruct[10]; // 用来保存每行开头的指令int pos; // 用来保存插入或者搜索的位置ElemType e; // 用来保存姓名的节点while(scanf("%s", strInstruct) != EOF){if(strcmp(strInstruct, "insert") == 0){ // 插入姓名scanf("%d%s" ,&pos, e.name); // 读取待插入的位置与姓名ListInsert_Sq(&namelist, pos, e); // 将姓名插入到pos之前}else if(strcmp(strInstruct, "show") == 0){ // 显示列表中所有的元素ListShow(namelist);}else if(strcmp(strInstruct, "delete") == 0){ // 删除某个姓名scanf("%s", e.name); // 读取需要删除的元素// 先查找这个姓名在列表中的位置// 然后调用 ListDelete_Sq 删除该元素pos = LocateElem_Sq(namelist, e, cmp);ListDelete_Sq(&namelist, pos, &e);}else if(strcmp(strInstruct, "search") == 0){ // 查找某个姓名的位置scanf("%s", e.name); // 读取需要查找的元素printf("%d\n", LocateElem_Sq(namelist, e, cmp));}}return 0;}
GH
#include<stdio.h> //H#include<string.h>int nex[11]={2,0,3,4,5,6,7,8,9,10,0};char mem[11][10];int mal(){int i=nex[0];if(nex[0]){nex[0]=nex[nex[0]];}return i;}int len(char s[]){int i=0;while(s[i++]);return i;}void search(char s[]){int i=nex[1];while(i&&strcmp(s,mem[i]))i=nex[i];printf("%2d\n********************\n",i);return ;}void show(){int i,le;for(i=0;i<11;i++){le=len(mem[i]);printf("%-8s%2d\n",mem[i],nex[i]);}printf("********************\n");return;}void insert(int w,char s[]){int p1=1,p2=nex[1];int r=mal();strcpy(mem[r],s);int t=1;while(t!=w){p1=p2;p2=nex[p2];t++;}nex[r]=p2;nex[p1]=r;return;}void del(int w){int p1=1,p2=nex[1];int t=1;while(t!=w){p1=p2;p2=nex[p2];t++;}nex[p1]=nex[p2];nex[p2]=nex[0];nex[0]=p2;}int main(){char zo[10];int W;while(~scanf("%s",zo)){switch(zo[2]){case 'o':{show();break;}case 's':{scanf("%d%s",&W,zo);insert(W,zo);break;}case 'l':{scanf("%d",&W);del(W);break;}case 'a':{scanf("%s",zo);search(zo);break;}}}return 0;}
I
#include<stdio.h> //I#include<malloc.h>struct nood //双向链表;{int val;struct nood *next;struct nood *front;}head,rear;int main(){int i,n,t;while(~scanf("%d",&n)){head.next=&rear;rear.front=&head;struct nood *p=&head;int b=0;for(i=0;i<n;i++) //插入操作{b=1;scanf("%d",&t);struct nood *r=(struct nood*)malloc(sizeof(struct nood));r->val=t;r->next=p->next;r->front=p;p->next->front=r;p->next=r;p=r;printf("%d ",t);}if(b==1)printf("\n");if(n==0){printf("list is empty\n");continue;}p=rear.front;b=0;while(p!=&head){printf("%d ",p->val);p=p->front;}printf("\n");}return 0;}
J
#include<stdio.h> //J#include<malloc.h>struct nood{int val;struct nood *next;}head,rear; //定义了头结点和尾结点,全局变量;int main(){int i,n,t;int q=0; //q的作用主要是在每次打完原始数据后换行;while(~scanf("%d",&n)) //数据为多组,使用这个方式输入,需要按ctrl+z才能退出程序;{if(!q)q=1;head.next=&rear; //头结点的指针指向首个结点;struct nood *p=&head; //定义了一个结构体指针p(辅助的结点)并且将它跟头结点一样指向首个结点,用以遍历和插入;int b=0; //相当于flag,不参与运算,仅仅标志着一个变化;for(i=0;i<n;i++){scanf("%d",&t); //读取即将存到现在结点的数据;struct nood *r=(struct nood*)malloc(sizeof(struct nood)); //申请一个新的空间,为要插入的结点;r->val=t; //将新的结点的val存上值;r->next=p->next; //第一次p为头结点,将为结点r的前一个结点,后来也将为结点r的前一个结点,p->next为&rear,此处的意思是在head 和rear之间插入元素;p->next=r; //让辅助结点p指向要插入的结点,为下一次结点p作为插入结点的前一个结点--做准备;p=r; //p地址应该是插入结点的前一个结点的地址,将地址r给地址p,为下一次插入--做准备;printf("%d ",t); //输出原始数据;}if(n==0) //判断链表为空的情况;{printf("list is empty\n");continue;}if(q) //在原始数据之后打上换行,放在这里时因为链表为空时不需要打换行;printf("\n");p=head.next; //p的重新利用,指向首个结点;while(p->next!=&rear) //对数据进行操作的循环,判断链表的遍历是否结束,由于此处p-val要与p->next->val比较,所以就判断下一个是不是为尾结点;{while(p->val==p->next->val)p->next=p->next->next;if(p->next!=&rear)p=p->next;}p=head.next;b=0;while(p!=&rear) //打出新数据的循环,判断链表的遍历是否结束,尾结点不进入循环;{printf("%d ",p->val);p=p->next;}printf("\n");}return 0;}