C语言scan输入n数,找出其中最小的数,将它与最前面的数交换后输出这些数

Problem Description
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。

Input
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。

Output
对于每组输入数据,输出交换后的数列,每组输出占一行。

Sample Input
4 2 1 3 4
5 5 4 3 2 1
0

Sample Output
1 2 3 4
1 4 3 2 5

2个回答

#include
#include

int main()
{
int a [10000];
int n;
while(scanf(%d,&n)!=EOF){
int min = 999999;
int flag = 0;
for(int i =1;i<=n;i++){
scanf(%d,&a[i]);
if(min > a[i]){
min = a[i];
flag = i;
}
}
if(min!=999999){
int temp = a[1];
a[1] = a[flag];
a[flag] = temp;
}
for(int i = 1; i<=n;i++){
if(i ==1){
prinf(a[i]);
}else{
prinf(" "+a[i]);
}
}
printf("\n");
}
return 0;
}
试一下,差不多,手写没运行

提供一个不是很优的算法,
1. 用二维数据存储输入的数据,每一行第一个数字存放该行实际长度
2. 处理每一行找到最小值,与最大值位置互换
3. 输出处理结果

下面是我的代码(PS:大四开始就没写过C语言啦,语法有点遗忘)

#include <stdio.h>

#define ROW 100 // 最多支持100行
#define COLUMN 100 // 每行最多支持输入99个数字,第一个数字存长度

void inputNums(int nums[ROW][COLUMN]);

void changePosition(int nums[ROW][COLUMN]);

void printNums(int nums[ROW][COLUMN]);

int main() {

    // 二维数组存储输入值
    int nums[ROW][COLUMN];

    // 数据输入
    inputNums(nums);
    // 数据处理
    changePosition(nums);
    // 数据输出
    printNums(nums);

    return 0;
}

void inputNums(int nums[ROW][COLUMN]) {
    int row = 0;
    do {
        scanf("%d", &(nums[row][0])); // 第一个数字
        if (nums[row][0] == 0) {
            break; // 输入结束
        }

        // 输入n个数
        for (int i = 1; i <= nums[row][0] && i < COLUMN; ++i) {
            scanf("%d", &(nums[row][i]));
        }
    } while (++row < ROW);
}

void changePosition(int nums[ROW][COLUMN]) {
    // 处理每一行数据找到最小值与第一个数字交换位置
    for (int i = 0; i < ROW && nums[i][0] != 0; ++i) {

        int min = nums[i][1];
        int position = 1;

        // 找到最小值及最小值的位置
        for (int j = 2; j <= nums[i][0]; ++j) {
            if (nums[i][j] < min) {
                min = nums[i][j];
                position = j;
            }
        }

        // 位置交换
        int t = nums[i][1];
        nums[i][1] = min;
        nums[i][position] = t;
    }
}

void printNums(int nums[ROW][COLUMN]) {
    for (int i = 0; i < ROW && nums[i][0] != 0; ++i) {
        for (int j = 1; j <= nums[i][0]; ++j) {
            printf("%d ", nums[i][j]);
        }
        printf("\n");
    }
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐