CodeRookie


私信TA

用户名:Shmily124

访问量:133741

签 名:

清风前烹茶对弈,明月下把酒言欢

等  级
排  名 14
经  验 22985
参赛次数 7
文章发表 39
年  龄 0
在职情况 学生
学  校 ZUA
专  业 计科

  自我简介:

悄悄地秃头,然后惊艳所有人?

解题思路:
定义一个数组,输入数字时将数字存入数组,下标为该数字的绝对值,例如:输入 -5 ,则令 a [ 5 ] = -5
输出时,判断数组下标是否与该位置储存的数字的绝对值相等,是则输出

可利用 abs( ) 函数获取绝对值,头文件为

当然也可以自己写:

int abs(int num)
{
    return (num >= 0) ? num : -num;     //若num>=0,返回num,否则返回-num
}

或者这样:

#define abs(x) (x >= 0 ? x : -x)          //最外面的括号不能少


注意事项:

1、要将数组定义在循环内

2、初始化 a [ 0 ] 不能等于 0 

3、定义数组的长度决定了输入数字的范围,定义a[100]虽然可以通过,但如果输入的数字超过100就无法运行

参考代码:

#include <stdio.h>
#include <stdlib.h> //函数 abs() 的头文件
 
int main()
{
    int n, num;                             //定义n为每行输入的个数,num储存输入的值
    while (scanf("%d", &n) != EOF && n)     //外循环输入个数且不为0
    {
        int a[100] = {-1};                  //定义数组a在循环内,且初始化a[0] = -1
        for (int i = 0; i < n; i++)         //循环输入
        {
            scanf("%d", &num);              //输入num
            a[abs(num)] = num;              //将num存入数组,下标为num的绝对值
        }
        for (int i = 99; i >= 0; i--)       //降序循环下标i
        {
            if (i == abs(a[i]))             //下标与储存的数字绝对值相等
            {
                printf("%d ", a[i]);        //输出数字
            }
        }
        putchar('\n');                      //输出换行符
    }
    return 0;
}


 

0.0分

20 人评分

  评论区

嗯,i=99,有问题。
2022-05-06 11:31:55
数字大了就不行了吧
2021-01-23 21:45:25
  • «
  • 1
  • »