C语言问题求大神帮助,思路不对
从键盘输入10个整数存放在数组a中,然后对数组a中的10个整数按从小到大连续编号,要求不能改变数组a中元素的顺序,且相同的整数要具有相同的编号。最后输出数组a及其元素的编号。
例如:
输入:
5 3 4 7 3 5 6 9 21 100
则输出为:
5 3 4 7 3 5 6 9 21 100
3 1 2 5 1 3 4 6 7 8
程序代码:#include <stdio.h>
#include <limits.h>
int main( void )
{
int a[10];
for( size_t i=0; i!=10; ++i )
scanf( "%d", &a[i] );
int b[10] = { 0 };
for( int index=1,count=0; count!=10; ++index )
{
int minval = INT_MAX;
for( size_t i=0; i!=10; ++i )
if( b[i]==0 && a[i]<minval )
minval = a[i];
for( size_t i=0; i!=10; ++i )
if( a[i] == minval )
b[i]=index, ++count;
}
for( size_t i=0; i!=10; ++i )
printf( "%d%c", a[i], "\t\n"[i+1==10] );
for( size_t i=0; i!=10; ++i )
printf( "%d%c", b[i], "\t\n"[i+1==10] );
}
程序代码:
#include<stdio.h>
int main()
{
int i, j = 0, temp, b[10], arr[10][10];
for (i = 0;i < 10;i++)
{
scanf("%d", &arr[0][i]);
b[j] = arr[0][i];
j++;
}
for (i = 0, j = 1;i < 10;i++) // 对二维数组的第0行由小至大排序
{
for (j = 0;j < 9;j++)
{
if (arr[0][j] > arr[0][j + 1])
{
temp = arr[0][j];
arr[0][j] = arr[0][j + 1];
arr[0][j + 1] = temp;
}
}
}
arr[1][0] = 1;
for (i = 1;i < 10;i++) // 让二维数组的第一行带上由小至大的序号
{
if (arr[0][i - 1] == arr[0][i])
{
arr[1][i] = arr[1][i - 1];
}
else
{
arr[1][i] = arr[1][i - 1] + 1;
}
}
for (i = 0;i < 10;i++) // 输出数组
{
printf("%4d", b[i]);
}
printf("\n");
for (j = 0;j < 10;j++) // 输出由小至大顺序的下标
{
for (i = 0;i < 10;i++)
{
if (b[j] == arr[0][i])
{
printf("%4d", arr[1][i]);
break;
}
}
}
printf("\n");
}
[此贴子已经被作者于2021-1-12 21:23编辑过]