#include
struct num
{
int a;
int b;
};
void f(struct num s[],int n) //该函数是将struct num s[]数组从小到达排序
{
int index,j,k;
struct num temp;
for(k=0;k
index=k;
for(j=k+1;j temp=s[index]; //最小值给temp
s[index]=s[k]; //将k-1位置的b值给原最小j-1位置
s[k]=temp; //将最小值给k-1位置
}
}
main()
{
int count ,i,k,m,n,no;
struct num s[100],*p;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i
s[i].a=i+1;
s[i].b=0;
}
p=s;
count=no=0;
while(no
if(p->b==0)count++; //每m个0,使第m个为no++
if(count==m)
{
no++;
p->b=no;
count=0;
}
p++; //当P只向struct num s[]最后一个时,重新回到头
if(p==s+n)
p=s;
} //对n个成员赋值后结束。
f(s,n); //从小到大排序
printf("%d:%d\n",s[k-1].b,s[k-1].a);//输出第k-1个成员b与a的值
}
21题:输入n=5,m=4,k=3.一共有5个元素,先使s[1].a=1,s[2].a=2,s[3].a=3,s[4].a=4, s[5].a=5。使1-5个b都为0。之后对lm(l=1,2……)个0赋值,s[4].b=1,s[3].b=2, s[5].b=3,s[2].b=4,s[1].b=5。然后在对s[].b进行从小到大排列得:
num s[1].b=1,num s[1].a=4;
num s[2].b=2,num s[2].a=3;
输出*****num s[3].b=3,num s[3].a=5;
num s[4].b=4,num s[4].a=2;
num s[5].b=5,num s[5].a=1.
输出s[k-1].b,s[k-1].a,本题是s[2].b,s[2].a
22题。
s[].a:1 2 3 4 5
s[].b:2 4 1 5 3
排序后:
s[].a:3 1 5 2 4
s[].b:1 2 3 4 5
输出s[4].b=4,s[4].a=2.
其他同理,运行下就出来了。
给好评哦,亲!