链表指针问题
n个人编号为 [s + 1 , s + n],有 n个座位编号为 [1 , n],编号为 i的人只能坐到编号为它的约数的座位,问每个人是否都有位置坐。s,n随机输入
很难吗?根据输入的s,n,踏踏实实一步一个脚印跑遍历循环测试一下不就知道了。。。
另外,这和链表指针有半毛关系?标题起的不恰当
#include<stdio.h> #include<stdlib.h> //#define N 5--测试用,可以删 //void begin();//初始化处理——测试用,可以删 int change(int []);//操作函数 void number(int [],int);//排序函数 void swap(int *,int *);//交换函数 void print(int []);//输出函数 int n; /*void begin() { int i,a[N]; for (i=0;i<N;i++) scanf("%d",&a[i]);//输入数字 printf("\n"); number(a,0);//对输入数进行排序 print(a); change(a);//执行操作 //这份原稿是排列用可以删 }*/ int change(int a[]) { int i,k1,k2; for (i=k1=0;i<n-1;i++) if (a[i]<a[i+1]) k1=i+1;//a[k1]为右端数的最大值 if (!k1)return 0; for (k2=k1;k2<n-1;k2++) if (a[k1-1]<=a[k2]&&a[k1-1]>=a[k2+1]) break;//k2为交换数据的关键值 swap(&a[k1-1],&a[k2]);//交换数值 number(a,k1); return (k1); } void swap(int *a,int *b)//交换两数值的函数 { int t; t=*a; *a=*b; *b=t; } void number(int a[],int k1)//排序函数 { int i,j,u; for (i=k1,u=0;i<n;i++,u++) for (j=k1;j<n-1-u;j++) if (a[j]>a[j+1]) swap(&a[j],&a[j+1]);//交换数值 } void print(int a[]) { int i; for (i=0;i<n;i++) printf("%4d",a[i]); printf("\n"); } int main() { int i,j,k=1,s,t=0; int *man,*set; scanf("%d%d",&n,&s); man=malloc(n*sizeof(int)); set=malloc(n*sizeof(int)); for (i=0;i<n;i++) { set[i]=i+1; man[i]=s+i+1; } number(man,0); while (k!=0) { for (i=0,t=1;i<n;i++) for (j=0;j<n;j++) if (man[i]%set[i]!=0) t=0; if (t==1)break; k=change(man); } if (t==0)printf("该情况不可行!\n"); else { printf("有可能,情况如下:\n"); print(set); print(man); } return 0; }