链表指针问题
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;
}
