西工大C语言POJ作业.docx
- 文档编号:10317565
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:31
- 大小:359.62KB
西工大C语言POJ作业.docx
《西工大C语言POJ作业.docx》由会员分享,可在线阅读,更多相关《西工大C语言POJ作业.docx(31页珍藏版)》请在冰点文库上搜索。
西工大C语言POJ作业
T071、大数乘法
#include
#include
#include
voidcheng(chara[],charb[])
{
inti,j,ca,cb,*s;
ca=strlen(a);
cb=strlen(b);
s=(int*)malloc(sizeof(int)*(ca+cb));//分配存储空间
for(i=0;i for(i=0;i for(j=0;j s[i+j+1]+=(a[i]-'0')*(b[j]-'0'); for(i=ca+cb-1;i>=0;i--)//这里实现进位操作 if(s[i]>=10) { s[i-1]+=s[i]/10; s[i]%=10; } i=0; while(s[i]==0)i++;//跳过头部0元素 for(;i printf("\n"); free(s); } intmain() { chara[100],b[100]; gets(a),gets(b); if(a[0]=='-'&&b[0]! ='-') { printf("-"); cheng(&a[1],b); } elseif(a[0]=='-'&&b[0]=='-') { cheng(&a[1],&b[1]); } elseif(a[0]! ='-'&&b[0]=='-') { printf("-"); cheng(a,&b[1]); } else cheng(a,b); return0; } T072、创建与遍历职工链表 #include #include structmember{ intdata; structmember*next; }; structmember*creat(structmember*head) { structmember*p1,*p2=NULL; inti,n; scanf("%d",&n); for(i=0;i { p1=(structmember*)malloc(sizeof(structmember)); scanf("%d",&p1->data); if(i==0) head=p1; else p2->next=p1; p2=p1; } p2->next=NULL; returnhead; } voidlist(structmember*head) { structmember*p=head; while(p! =NULL) { printf("%d",p->data); p=p->next; } printf("\n"); } intmain() { structmember*head; head=creat(head); list(head); return0; } T073、幸运儿 #include intmain() { inta[51]={0},b[20],x,count=0,num=0,j=0,n,i,flag=0; scanf("%d%d",&n,&x); for(i=0;i<20;i++) scanf("%d",&b[i]); while (1) { for(i=1;i<=n;i++) { if(a[i]==0)num++; if(num==b[j]) { a[i]=1; num=0; count++; } if(count==n-x) { flag=1; break; } } if(flag==1) break; j++; num=0; } for(i=1;i<=n;i++) if(a[i]==0) printf("%d",i); printf("\n"); return0; } T074、插入链表节点 #include #include structmember{ intdata; structmember*next; }; structmember*creat(structmember*head) { structmember*p1,*p2=NULL; inti,n; scanf("%d",&n); for(i=0;i { p1=(structmember*)malloc(sizeof(structmember)); scanf("%d",&p1->data); if(i==0) head=p1; else p2->next=p1; p2=p1; } p2->next=NULL; returnhead; } structmember*insert(structmember*head) { structmember*p0=head,*p1; p1=(structmember*)malloc(sizeof(structmember)); scanf("%d",&p1->data); while(p0->next! =NULL) { if(p0->data { p1->next=p0->next; p0->next=p1; } p0=p0->next; } returnhead; } voidlist(structmember*head) { structmember*p=head; while(p! =NULL) { printf("%d",p->data); p=p->next; } printf("\n"); } intmain() { structmember*head; head=creat(head); head=insert(head); list(head); return0; } T075、毕业设计论文打印 #include intmain() { intn,m,a[100]={0},count=0,flag=0,i,j; scanf("%d%d",&n,&m); for(i=0;i scanf("%d",&a[i]); while (1) { for(i=0;i =0;i++) { for(j=i;j if(a[j]>a[i]) break; if(j==n) { a[i]=0; count++; if(i==m) { flag=1; break; } } } if(flag==1) break; } printf("%d\n",count); return0; } T076、链表动态增长或缩短 #include #include #defineLENsizeof(structstudent) inta[10000]; structstudent { intage; structstudent*next; }; intn; structstudent*creat(intnum) { structstudent*head; structstudent*p1,*p2; n=0; p1=p2=(structstudent*)malloc(LEN); scanf("%d",&p1->age); head=NULL; while(n { n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(structstudent*)malloc(LEN); if(n scanf("%d",&p1->age); } p2->next=NULL; returnhead; } structstudent*del(structstudent*head) { structstudent*p1,*p2,*p3,*p4,*p5; p1=head; p5=head; do { if(a[p1->age]==1&&p1->next! =NULL) {p2->next=p1->next; p3=p5; while(p3! =NULL) { if(p3->age==p1->age) {if(p3==head) head=p3->next; else p4->next=p3->next;} p4=p3; p3=p3->next; }} elseif(a[p1->age]==1&&p1->next==NULL) {p2->next=NULL; p3=p5; while(p3! =NULL) { if(p3->age==p1->age) {if(p3==head) head=p3->next; else p4->next=p3->next;} p4=p3; p3=p3->next; }} elsea[p1->age]=1; p2=p1; p1=p1->next; }while(p1! =NULL); returnhead; } intmain() { intnum; scanf("%d",&num); structstudent*p; p=creat(num); p=del(p); do { printf("%d",p->age); p=p->next; }while(p! =NULL); return0; } T077、大数减法 #include #include #definemax(a,b)a>b? a: b #definemin(a,b)a>b? b: a intsum[101]; voidjia(chara[],charb[]) { intflag=0,i,len1,len2,lenmax,lenmin; len1=strlen(a),len2=strlen(b); lenmax=max(len1,len2),lenmin=min(len1,len2); for(i=1;i<=lenmax;i++) { if(i<=lenmin) { sum[lenmax-i]=a[len1-i]+b[len2-i]-'0'-'0'+flag; if(sum[lenmax-i]>=10) { sum[lenmax-i]=sum[lenmax-i]-10; flag=1; } elseflag=0; } else{ if(len1>len2) { sum[lenmax-i]=a[len1-i]-'0'+flag; if(sum[lenmax-i]>=10) { sum[lenmax-i]=sum[lenmax-i]-10; flag=1; } elseflag=0; } else { sum[lenmax-i]=b[len2-i]-'0'+flag; if(sum[lenmax-i]>=10) { sum[lenmax-i]=sum[lenmax-i]-10; flag=1; } elseflag=0; } } } if(flag==1) printf("1"); for(i=0;i printf("%d",sum[i]); printf("\n"); } voidjian(chara[],charb[]) { intflag=0,i; intlen1,len2; len1=strlen(a),len2=strlen(b); for(i=1;i<=len1;i++) { if(i<=len2) { if(a[len1-i]-b[len2-i]-flag>=0) { sum[len1-i]=a[len1-i]-b[len2-i]-flag; flag=0; } else { sum[len1-i]=a[len1-i]-b[len2-i]-flag+10; flag=1; } } else { if(a[len1-i]-flag-'0'>=0) { sum[len1-i]=a[len1-i]-flag-'0'; flag=0; } else { sum[len1-i]=a[len1-i]-flag+10-'0'; flag=1; } } } for(i=0;i for(;i printf("%d",sum[i]); printf("\n"); } voidcompare(chara[],charb[]) { intlen1,len2; len1=strlen(a),len2=strlen(b); if(len1>len2||(len1==len2&&strcmp(a,b)>0)) jian(a,b); elseif(strcmp(a,b)! =0) { printf("-"); jian(b,a); } else printf("0\n"); } intmain() { chara[100],b[100]; gets(a); gets(b); if(a[0]=='-'&&b[0]! ='-') { printf("-"); jia(&a[1],b); } elseif(a[0]=='-'&&b[0]=='-') compare(&b[1],&a[1]); elseif(a[0]! ='-'&&b[0]=='-') jia(a,&b[1]); else compare(a,b); return0; } T078、大数除法 #include #include intlen1,len2; intre[105]; voidsub(chars1[],chars2[]) { inti=0; intj; while (1) { if(s1[i]=='0') i++; else { j=i; break; } } for(;i { s1[i]=s1[i]-s2[i]+'0'; } for(i=len2-1;i>j;i--)//低位开始检测是否小于0 { if(s1[i]<'0') { s1[i]+=10; s1[i-1]--; } } } voidchu(chars1[],chars2[]) { intp,i; len1=strlen(s1); len2=strlen(s2); if(len1 { printf("0\n"); return; } p=0; while (1) { re[p]=0; while(strncmp(s1,s2,len2)>=0) //一直进行减法,直到不能减为止 { sub(s1,s2); re[p]++; } p++; if(len1==len2) break; for(i=len2-1;i>=0;i--) //在s2前面补0,以便进行减法运算 { s2[i+1]=s2[i]; } s2[0]='0'; len2++; s2[len2]='\0'; } i=0; while (1) { if(re[i]==0) i++; else break; } for(;i printf("%d",re[i]); printf("\n"); } intmain(void) { chars1[105]; chars2[105]; gets(s1),gets(s2); if(s1[0]=='-'&&s2[0]! ='-') { printf("-"); chu(&s1[1],s2); } elseif(s1[0]=='-'&&s2[0]=='-') chu(&s1[1],&s2[1]); elseif(s1[0]! ='-'&&s2[0]=='-') { printf("-"); chu(s1,&s2[1]); } else chu(s1,s2); return0; } T079、链表节点删除 #include #include structstudent{ intno; charname[12]; intage; structstudent*next; }; structstudent*deletelist(structstudent*head,intn) { structstudent*p=head,*q; if(p->no==n) { head=p->next; free(p); } else{ while(p->next! =NULL&p->next->no! =n) p=p->next; if(p->next->no==n) { q=p->next; p->next=q->next; free(q); } } returnhead; } voidlist(structstudent*head) { structstudent*p=head; while(p->next! =NULL) { printf("%d",p->no); p=p->next; } printf("\n"); } intmain() { intn,i=0; structstudent*head,*p1,*p2; p1=p2=(structstudent*)malloc(sizeof(structstudent)); for(i=0;;i++) { if(i==0)head=p1; else p2->next=p1; p2=p1; scanf("%d",&p1->no); if(p1->no==0)break; scanf("%s%d",p1->name,&p1->age); p1=(structstudent*)malloc(sizeof(structstudent)); } p2->next=NULL; scanf("%d",&n); list(head); head=deletelist(head,n); list(head); return0; } T080、行程编码压缩算法 #include #include intmain(void) { charline[100],a; inti,k,m; k=1; m=0; gets(line); a=line[0]; for(i=1;line[i]! ='\0';i++) { if(a! =line[i]) { if(m==0&&k==1) { printf("1"); m=1; } if(a=='1'&&m==1)printf("11"); if(m==1&&a! ='1')printf("%c",a); if(k! =1) { printf("%d%c",k,a); k=1; } } else { if(m==1) { printf("1"); m=0; } if(k==9) { printf("9%c",a); k=1; } elsek++; } a=line[i]; } if(k! =1) { printf("%d%c",k,a); } else { if(m==0) { if(a=='1') printf("1111"); else printf("1%c1",a); } else { if(a=='1') printf("111"); else printf("%c1",a); } } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西工大 语言 POJ 作业