鱼C论坛

 找回密码
 立即注册
查看: 1983|回复: 5

[已解决]救命这个怎么写

[复制链接]
发表于 2022-6-6 14:29:22 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
随机产生10个1~100之间的整数存放于数组a中,将这些数据按降序排列。再从键盘输入一个整数,将这个整数插入到a数组中使得数组中的整数仍然按降序排列
最佳答案
2022-6-6 15:07:04
本帖最后由 临时号 于 2022-6-6 15:10 编辑
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
        int a[11];
        int i;
        int j;
        int b;
        srand(time(0));
        
        for(i=0;i<10;i++){
                a[i] = rand()%100+1;
        }
        for(i=0;i<10;i++){
                b=i;
                for(j=b+1;j<10;j++){
                        if(a[b]<a[j]){
                                b=j;
                        }
                }
                if(b-i){
                        j=a[b];
                        a[b]=a[i];
                        a[i]=j;
                } 
        }
    
        scanf("%d",a+10);
        for(i=10;i;i--){
                if(a[i]<=a[i-1]){
                        break;
                }
                b=a[i];
                a[i]=a[i-1];
                a[i-1]=b;
        }
    
        // 观察数组 
        for(i=0;i<11;i++){
                printf("%d ",a[i]);
        }
        printf("\n");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-6 15:07:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 临时号 于 2022-6-6 15:10 编辑
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
        int a[11];
        int i;
        int j;
        int b;
        srand(time(0));
        
        for(i=0;i<10;i++){
                a[i] = rand()%100+1;
        }
        for(i=0;i<10;i++){
                b=i;
                for(j=b+1;j<10;j++){
                        if(a[b]<a[j]){
                                b=j;
                        }
                }
                if(b-i){
                        j=a[b];
                        a[b]=a[i];
                        a[i]=j;
                } 
        }
    
        scanf("%d",a+10);
        for(i=10;i;i--){
                if(a[i]<=a[i-1]){
                        break;
                }
                b=a[i];
                a[i]=a[i-1];
                a[i-1]=b;
        }
    
        // 观察数组 
        for(i=0;i<11;i++){
                printf("%d ",a[i]);
        }
        printf("\n");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-6 17:09:22 | 显示全部楼层
本帖最后由 jhq999 于 2022-6-6 17:18 编辑

用数组模拟链表
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a[24]={0},i,j;
    srand(time(0));
    a[0]=a[1]=0;
    for( i=2;i<22;i+=2)
    {
        a[i]=rand()%100+1;
        for(j=0;a[j+1];j=a[j+1])
        {
            if(a[i]<a[a[j+1]])break;
        }
        a[i+1]=a[j+1];
        a[j+1]=i;

    }
    j=a[1];
    while(a[j])
    {
        printf("%4d  ",a[j]);
        j=a[j+1];
    }
    scanf("%d",a+22);
    for(j=0;a[j+1];j=a[j+1])
    {
        if(a[22]<a[a[j+1]])break;
    }
    a[23]=a[j+1];
    a[j+1]=22;
    j=a[1];
    while(a[j])
    {
        printf("%4d  ",a[j]);
        j=a[j+1];
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-6 17:50:50 | 显示全部楼层
C++
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>

void swap(int& a, int& b) {
        int t = a;
        a = b;
        b = t;
}

using std::vector, std::string;
using std::cout, std::cin, std::endl;
void show(string str, vector<int> arr) {
        cout << str << ": ";
        for (const int& num : arr) {
                cout << num << " ";
        }
        cout << endl;
}

int main(void) {
        int a = 1, b = 100, num;
        vector<int> arr;
        srand((unsigned)time(NULL));

        for (int i = 0; i < 10; ++i) {
                arr.push_back((rand() % (b - a + 1)) + a);
        }
        
        show("初始数组", arr);

        for (int i = 0; i < 9; ++i) {
                for (int j = i + 1; j < 10; ++j) {
                        if (arr[i] < arr[j]) {
                                swap(arr[i], arr[j]);
                        }
                }
        }

        show("降序排序", arr);

        cin >> num;

        for (int i = 0; i < 10; ++i) {
                if (arr[i] < num) {
                        arr.insert(arr.begin() + i, num);
                        break;
                }
        }

        show("插入整数", arr);
        return 0;
}
C
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void swap(int *a, int *b) {
        int t = (*a);
        (*a) = (*b);
        (*b) = t;
}

void show(char *str, int *arr, size_t N) {
        printf("%s ", str);
        for (int i = 0; i < N; ++i) {
                printf("%d ", arr[i]);
        }
        printf("\n");
}

int main(void) {
        int a = 1, b = 100, num;
        int arr[11];
        time_t t;
        srand((unsigned)time(NULL));

        for (int i = 0; i < 10; ++i) {
                arr[i] = (rand() % (b - a + 1)) + a;
        }
        
        show("初始数组", arr, 10);

        for (int i = 0; i < 9; ++i) {
                for (int j = i + 1; j < 10; ++j) {
                        if (arr[i] < arr[j]) {
                                swap(&arr[i], &arr[j]);
                        }
                }
        }

        show("降序排序", arr, 10);

        scanf("%d", &num);

        for (int i = 0; i < 10; ++i) {
                if (arr[i] < num) {
                        for (int j = 10; j > i; --j) {
                                arr[j] = arr[j - 1];
                        }
                        arr[i] = num;
                        break;
                }
        }

        show("插入整数", arr, 11);
        return 0;
}
Python
import random

arr = [random.choice(range(1, 101)) for _ in range(10)]

print("初始数组:", *arr)

for i in range(9):
    for j in range(i + 1, 10):
        if arr[i] < arr[j]:
            arr[i], arr[j] = arr[j], arr[i]

print("降序数组:", *arr)

num = int(input())

for i in range(10):
    if arr[i] < num:
        arr.insert(i, num)
        break

print("插入整数:", *arr)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-6 18:09:51 | 显示全部楼层
本帖最后由 jhq999 于 2022-6-6 18:51 编辑
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int numcmp(int num1,int num2)
{
    return num1<num2;
}
int main()
{

    vector<int> s;
    srand(time(0));

    for(int i=0;i<10;i+=1)
    {
        s.push_back(rand()%100+1);
    }
    sort(s.begin(),s.end(),numcmp);
    for(int i:s)printf("%4d",i);
    printf("\n");
    int r;
    scanf("%d",&r);
    s.push_back(r);
    sort(s.begin(),s.end(),numcmp);
    for(int i:s)printf("%4d",i);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-6 22:00:52 | 显示全部楼层
来整一个“现代 C++ ”版本
#include<algorithm>
#include<iostream>
#include<iterator>
#include<random>
#include<vector>
using namespace std;
int main(){
    mt19937_64 engine{ random_device()() };
    uniform_int_distribution<> distribute(1, 100);
    vector<int> array(10);
    generate(array.begin(), array.end(), [&engine, &distribute](){ return distribute(engine); });
    sort(array.begin(), array.end(), greater<>());
    ranges::copy(array, ostream_iterator<int>(cout, " "));
    cout << endl;
    int new_value;
    cin >> new_value;
    const auto bound = upper_bound(array.cbegin(), array.cend(), new_value, greater<>());
    array.insert(bound, new_value);
    ranges::copy(array, ostream_iterator<int>(cout, " "));
    cout << endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 12:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表