自学内容网 自学内容网

牛客网华为机试题说明三

一.  牛客网华为机试题

7. 取近似值

写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。
数据范围:保证输入的数字在 32 位浮点数范围内
输入描述:
输入一个正浮点数值
输出描述:
输出该数值的近似整数值
示例1
输入:5.5
输出:6
说明:
0.5>=0.5,所以5.5需要向上取整为6 

代码实现如下:

#include <stdio.h>

int main(int argc, char* argv[])
{
    float value;
    int data;
    scanf("%f", &value);
    data = value;

    if((value -data) > 0.5)
    {
        printf("%d", (data+1));
    }
    else
        printf("%d", data);

    return 0;
}

8.  合并表记录

数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。
提示:
0 <= index <= 11111111
1 <= value <= 100000
输入描述:
先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
示例1

输入:
4
0 1
0 2
1 2
3 4

输出:
0 3
1 2
3 4

#include <stdio.h>
#include <stdlib.h>
typedef struct {
    int index;
    int value;
} Table_s;

int array_compare(const void* array1, const void* array2)
{
    return ((Table_s *)array1)->index - ((Table_s *)array2)->index;
}

int main(int argc, char* argv[])
{
    int n;
    int i, count = 0;

    while(scanf("%d", &n) != EOF)
    {
        Table_s table[n];
        Table_s out[n];   

        for(i=0; i<n; i++)
            scanf("%d %d", &table[i].index, &table[i].value);

        //下标从小到大排序
        qsort(table, n, sizeof(table[0]), array_compare);

        for(i=0; i<n; i++)
        { //因为排序了,只需判断上一个的index和当前的index是不是相等
            if((count>0) && (out[count-1].index ==table[i].index))
            {  //相等就累加value
                out[count-1].value += table[i].value;
            }
            else
            {   //否则加入到下一个节点中
                out[count].index = table[i].index;
                out[count].value = table[i].value;
                count++;
            }
        }

        for(i=0; i<count; i++)
            printf("%d %d\n", out[i].index, out[i].value);

    }

    return 0;
}

9. 提取不重复的整数

描述
输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是 0 。
数据范围: 1≤n≤108 1≤n≤108
输入描述:输入一个int型整数
输出描述:按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1
输入:9876673
输出:37689

#include <stdio.h>

int main(int argc, char* argv[])
{
    int value;
    int m;
    char a[10] = {0};

    scanf("%d", &value);

    while(value)
    {   //每次取最低一位
        m = value%10;
        value = value/10; //去掉最低的一位数
        a[m]++;
        if(a[m] == 1) //取出第一次出现的数字
        {
            printf("%d", m);
        }
    }

    return 0;
}


原文地址:https://blog.csdn.net/wojiaxiaohuang2014/article/details/137980674

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!