| 222.53.124.* |
1楼 以前会编的,现在忘了,有人向我请教 答不出来 郁闷~~~ |
|
|
| 159.226.67.* |
2楼 被选中的就DELETE, 剩下的就是结果了. |
|
|
|
3楼 #include <stdlib.h> typedef struct _link { struct _link * next; int pos; }link; int main(int argc, char *argv[]) { link *front, *p, *last; p=front=(link *)malloc(sizeof(link));/*先分配一个*/ p->pos=1; int n=5, i=0, num=3; for(i=2;i<=n;i++)/*再分配其它的,总共n个*/ { p->next=(link *)malloc(sizeof(link)); p=p->next; p->pos=i; } p->next=front;/*使之围成一个圈*/ i=0;/*从头开始数*/ last=p=front;/*从头开始数*/ while(p->next!=p)/*当p->next==p时就只剩一个了*/ { i++;/*数数*/ if(i==3)/*数到3了,此人该下去*/ { last->next=p->next; free(p); p=last; i=0; } last=p;//last的作用是保存前一个link,如果是双向链表,就不需要它了 p=p->next;//到下一个人 } printf("%d",p->pos);//最后剩下的一个人的位置 system("PAUSE"); return 0; } |
|
|
|
| 202.116.24.* |
6楼 struct date { int num; struct date * next; }; int main() { int i=0,n=1,m; struct date *p1,*p2,*head; scanf("%d",m); p1=p2=head=(struct *)malloc(sizeof(struct date)); p1->num=n; while(n<m) { n++; p2->next=p1;p2=p1; p1=(struct *)malloc(sizeof(struct date)); p1->num=n; } p2->next=head; p1=head; while(p1->next!=NULL) { i++; p2=p1->next; if (i%3==0) p1->next=p2->next; p1=p1->next; } printf("%d",p1->num); getch(); } |
|
|
| 202.107.209.* |
7楼 有n个猴子围成一圈,从第一个人报数(从1报到3),凡报到3的人退出圈子,但要求是逆时打印出来的。 |
|
|
| 219.136.108.* |
8楼 |
|
|
|
9楼 #include <stdio.h> int main() { int N,M,*a; int i,j,position=1,total=0,chage;/*total出队的人数*/ printf("Enter the N and M\n"); scanf("%d%d",&N,&M); a=(int *)malloc(N*sizeof(int)); for (i=0;i<N;i++) a[i]=i+1; while(1) { position+=M-1; while (position>N-total) position=position-N+total; chage=a[position-1]; for (j=position;j<N-total;j++) a[j-1]=a[j]; a[N-total-1]=chage; total++; if (total==N)/*出队人数等于N,程序结束*/ { for (i=0;i<N-1;i++) printf("%d->",a[N-i-1]); printf("%d\n",a[0]); return 0; } } } |
|
|
|
|
10楼 #include <stdlib.h> typedef struct _Node { int num; struct _Node* next; }Node; int main() { int i,j; int number,count; Node* first,*cur,*pre; printf("Please input the total number,and the count.\n") ; scanf("%d,%d",&number,&count); for(i=1;i<=number;i++) { if(i==1) { first=(Node*)malloc(sizeof(Node)); first->num=1; first->next=NULL; cur=first; } else { pre=cur; cur=(Node*)malloc(sizeof(Node)); cur->num=i; cur->next=NULL; pre->next=cur; } } cur->next=first; cur=first; do { printf("%d,",cur->num); cur=cur->next; }while(cur!=first); printf("\n"); cur=first; pre=first; i=1; j=1; while(j<=number-1&&cur->next!=cur) { if(i==count) { i=1; j++; printf("%d,",cur->num); pre->next=cur->next; cur=pre->next; } else { i++; pre=cur; cur=cur->next; } } printf("\n%d",cur->num); getch(); return 0; } |
|
|
|
|
11楼 main() { int a[N],i,j=0,k=0; for(i=0;i<N;i++) a[i]=i+1; while(j<N-1) { for(i=0;i<N;i++) { if(a[i]!=0) {k++;} if(k==3) {a[i]=0;j++;k=0;} } } for(i=0;i<N;i++) if(a[i]!=0) {printf("%d\n",a[i]);} } |
|
|
|
| 61.185.217.* |
13楼 |
|
|
| 222.241.143.* |
14楼 有急用!!! |
|
|
| 219.224.57.* |
15楼 #include<iostream> using namespace std; int main() { int d,n; int t=0,s=0,k=0; int j=1; cin>>n>>d; int *a=new int [n]; for(int i=0;i<n;i++)a[i]=i+1; for(i=0;i<n;i++)s+=a[i]; for(i=0;i<n;i++) { t=s; s=0; if(j==d && a[i]!=0){a[i]=0;j=1;} if(a[i]!=0)j++; if(i==n-1)i=-1; for(k=0;k<n;k++)s+=a[k]; if(s==0)break; } cout<<"last:"<<t<<endl; delete a; return 0; } |
|
|
| 219.144.140.* |
16楼 |
|
|
| 124.114.28.* |
20楼 struct person { int number; int nextop; }link[N+1]; main() { int I,count,h; for(I=1;I<=N;I++) { if(I==N) link[i].nextp=1; else link[i].nextp=I+1; link[i].number=I; } printf(“\n”); count=0; h=N; printf(“sequence that person2 leave the circle:\n”); while(count<N-1) { I=0; while(I!=3) { h=link[h].nextp; if(link[h].number) I++; } printf(“%4d”,link[h].number); link[h].number=0; count++; } printf(“\nThe last one is”); for(I=1;i<=N;I++) if(link[i].number) printf(“%3d”,lin[i].number); } |
|
|
| 124.114.28.* |
21楼 #include<stdlib.h> #include<stdio.h> #include<string.h> #define NULL 0 #define LEN 13*sizeof(struct CIRCLE) struct CIRCLE { int num; struct CIRCLE *next; }*head; main() { int n=13,i,m,j; struct CIRCLE *p,*prv; head=(struct CIRCLE *)malloc(LEN); p=head,prv=head; for(i=1; i<=13; i++) { p->num=i; if(i==13) prv->next=head; /*head with tail*/ else { p++; prv->next=p; prv++; } } /*p=head;*/ /*p is 13*/ m=0; i=1; /*for(i=0,p=head; i<13; i++,p=p->next) printf("The last one is NO.%d.\n", p->num);*/ system("cls"); while(m < n-1) { j=0; while(j!=3) { p=p->next; if(p->num != 0) j++; } printf("%d\tdeleted\n",p->num); p->num=0; m++; } for(i=0,p=head; i<13; i++,p=p->next) if(p->num != 0) printf("The last one is NO.%d.\n", p->num); getch(); } |
|
|
|
22楼 #include "conio.h" #define nmax 50 main() { int i,k,m,n,num[nmax],*p; printf("please input the total of numbers:"); scanf("%d",&n); p=num; for(i=0;i<n;i++) *(p+i)=i+1; i=0; k=0; m=0; while(m<n-1) { if(*(p+i)!=0) k++; if(k==3) { *(p+i)=0; k=0; m++; } i++; if(i==n) i=0; } while(*p==0) p++; printf("%d is left\n",*p); getch(); } 如此简单``` |
|
|
|
| 222.137.151.* |
23楼 #define MAX 50 void main() { int i,k,n,m,num[MAX],*p; printf("请输入总人数"); scanf("%d",&n); p=num; for(i=0;i<n;i++) *(p+i)=i+1; i=0; k=0; m=0; while(m<n-1) { if(*(p+i)!=0) k++; if(k==3) { *(p+i)=0; k=0; m++; } i++; if(i==n) i=0; } while(*p==0) p++; printf("编号为%d的学员被留下:\n",*p); } |
|
|
| 222.137.151.* |
24楼 |
|
|
| 222.209.220.* |
25楼 牛 |
|
|
| 58.61.1.* |
26楼 int main(int argc, char **argv) { int *person = NULL, current, m, n, i; printf("please enter n:"); scanf("%d", &n); printf("please enter m:"); scanf("%d", &m); person = (int *)malloc(sizeof(int) * n); for (i = 0; i < n; i ++) { person[i] = i + 1; } person[--n] = 0; current = 0; while(n) { for (i = 1; i < m; i ++) { current = person[current]; } person[current] = person[person[current]]; current = person[current]; n --; } printf("n = %d\n", ++current); free(person); return 0; } |
|
|
| 58.61.1.* |
27楼 n代表人数;m代表一个数,谁报到这个数就离开,不只是局限于 3 . 我觉得我这个是最高效的。 |
|
|
| 124.116.44.* |
28楼 {printf("最后留下的是n-2号”) } |
|
|
| 222.90.211.* |
29楼 int the_last(int m) { int a[100],i,s=0,p=0; for(i=0;i<m;i++) a[i]=1;//当a[i]=1时表示人未退出报数循环 for(i=0;i<m;i++,i%=m)//在圈子里循环报数,直到最后一人退出 { s+=a[i]; if(s==3)//报到3的人退出 { s=0; a[i]=0;//修改a[i]的值,a[i]=0表示该人已经退出循环 p++;//退出的人数 } if(p==m) break;//报到最后一人,退出循环 } return(i+1); } void main() { int n,last; printf("请输入报数的总人数: "); scanf("%d",&n); last=the_last(n);//调用函数 printf("最后退出循环的人是第%d号\n",last); } |
|
|
|
30楼 int the_last(int m) { int a[100],i,s=0,p=0; for(i=0;i<m;i++) a[i]=1;//当a[i]=1时表示人未退出报数循环 for(i=0;i<m;i++,i%=m)//在圈子里循环报数,直到最后一人退出 { s+=a[i]; if(s==3)//报到3的人退出 { s=0; a[i]=0;//修改a[i]的值,a[i]=0表示该人已经退出循环 p++;//退出的人数 } if(p==m) break;//报到最后一人,退出循环 } return(i+1); } void main() { int n,last; printf("请输入报数的总人数: "); scanf("%d",&n); last=the_last(n);//调用函数 printf("最后退出循环的人是第%d号\n",last); } |
|
|
|