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编辑过]