例如输入:4 3 6 8 2 3 9
输出:
4 4
3 2
6 5
8 6
2 1
3 3
9 7
要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定。例如:输入的第2个整数为3,第6个整数也为3,则将先输入的整数3的编号在前,后输入的整数3的编号在后。编写函数完成为整数编号。
函数原型:int number( char *str, struct nn a[] );
其中:str:保存以字符串方式接收的键盘输入,
a: 保存整数及编号的结构数组的首地址,
函数返回值:已输入的整数的个数。
#include <stdio.h>
struct nn
{ int no;
int num;
};
typedef struct nn DATA;
int number( char * , DATA []);
int main( )
{
DATA b[100];
char sa[500]; //
int i, n;
gets( sa );
n = number( sa, b );
for ( i=0; i<n; i++ )
printf("%d %d\n", b[i].num, b[i].no );
return 0;
}
//
void bubbleSort(int arr[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(arr[j+1]<arr[j])
{
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
}
}
}
int number( char * str, DATA b[] )
{
int put[251],anshunxu[251],bianhao[251];
int i,j=0,have;
// 得数的个数
for(i=0;str[i]!='\0';i++)
{
if(str[i]!=' ')
{
put[j]=str[i];
j++;
}
}
put[j]='\0';
have=j;
j=0;
return have;
// 把put复制到anshunxu
for(i=0;i<have;i++)
{
anshunxu[i]=put[i];
}
// 冒泡排序
bubbleSort(anshunxu,have);
// 得到编号的数组
for(i=0;i<have;i++)
{
for(j=0;j<have;j++)
{
if(put[i]==anshunxu[j])
{
bianhao[i]=j+1;
}
}
}
bianhao[i]='\0';
for(i=0;i<have;i++)
{
b[i].num=put[i];
b[i].no=bianhao[i];
}
}