| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 309 人关注过本帖
标题:C语言问题求大神帮助,思路不对
只看楼主 加入收藏
鲲小鹏
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-1-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
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
搜索更多相关主题的帖子: 思路 编号 数组 C语言 整数 
2021-01-11 22:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:393
帖 子:7806
专家分:45692
注 册:2011-1-18
收藏
得分:7 
才10个数,排序的话反而牛刀杀鸡浪费时间

程序代码:
#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] );
}
2021-01-12 08:43
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:7
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:7 
回复 2楼 rjsp
程序用 VS2015 编译,运行正常,用 DEV_C++ 编译,用 .c 为后缀,#include<limits.h> 报错,没有这个文件目录,用 .cpp 为后缀,int minval = INT_MAX; 报错:INT_MAX 没有声明。我只能老老实实用排序写了一个,请指教:
程序代码:
#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编辑过]

2021-01-12 20:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:393
帖 子:7806
专家分:45692
注 册:2011-1-18
收藏
得分:0 
用 .c 为后缀,#include<limits> 报错,没有这个文件目录
可是我写的是limits.h呀!
2021-01-12 20:10
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:7
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 4楼 rjsp
上面我写错了。是,limits.h 这个头文件,我学习了一下,都是一些宏定义。VS2015 能正常运行

[此贴子已经被作者于2021-1-12 21:23编辑过]

2021-01-12 21:21
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:7
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 4楼 rjsp
程序是对的!还真是我复制到 DEV_C++ 编译器时出现了错误,那个 .h 没有了,手工添加后,.c 与 .cpp DEV_C++ 都运行正常了
2021-01-12 21:30
rouwang
Rank: 2
等 级:论坛游民
帖 子:2
专家分:14
注 册:2021-1-14
收藏
得分:7 
学习了
2021-01-14 08:43
快速回复:C语言问题求大神帮助,思路不对
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.136808 second(s), 8 queries.
Copyright©2004-2021, BCCN.NET, All Rights Reserved