华为机试—差值排序

对整形数组按照和指定整数的差值大小进行排序,按照差值升序排列返回。

要求实现方法:

public staticint[] calcTimes(int[] num, int value);

【输入】 num:整型数组;

value 指定的整数

【返回】 按照升序返回整型数组,排序按照各个整数和指定整数的差值大小

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例

输入:num = {1,2,3,4,5,10,17,18,19}  value = 5

返回:{5,4,3,2,1,10,17,18,19}

思路:记录下每个下表对应的值所对应的差值,和下标值,然后根据差值排序,然后根据记录的下标值还原原来的数组。

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef struct node{
    int pre_index;
    int diff;
    int value;
}node;
bool cmp(const node&a,const node& b)
{
    return a.diff<b.diff;
}
void calcTimes(int num[],int len,int value)
{
    node *t=(node*)malloc(sizeof(int)*len);
    for(int i=0;i<len;++i)
    {
        t[i].pre_index=i;
        t[i].diff=abs(num[i]-value);
    }
    sort(t,t+len,cmp);
    for(int i=0;i<len;++i)
    {
        t[i].value=num[t[i].pre_index];
    }
    for(int i=0;i<len;++i)
    {
        num[i]=t[i].value;
    }
}
int main(int argc, char *argv[])
{
    int num[]={1,2,3,4,5,10,17,18,19};
    int len=sizeof(num)/sizeof(int);
    int value=5;
    calcTimes(num,len,value);
    for(int i=0;i<len;++i)
        printf("%d ",num[i]);
    printf("\b\n");
    return 0;
}

测试结果:

时间: 2024-10-23 19:39:46

华为机试—差值排序的相关文章

华为机试—字符串去重排序

输入一个字符串,去掉重复出现的字符,并把剩余的字符串排序输出. #include<iostream> #include<string> using namespace std; int main(int argc, char *argv[]) { string s; while(cin>>s) { for(int i=0;i<s.size();++i) for(int j=i+1;j<s.size();++j) { if(s[i]>s[j]) { ch

华为机试—提取数字排序

输入多个字符串,分别提取出里面的数字,排序输出所有的数字. #include<iostream> #include<cctype> #include<vector> #include<string> #include<algorithm> using namespace std; vector<int>vec; int main(int argc, char *argv[]) { int n; string s; while(cin&

2015华为机试—— 整型数排序

要求:请实现对一整型数序列的排序操作. 需求: 1.对输入的整型数序列A,完成升序排列,将结果序列从B中输出.以整数值大小为关键字排序,即小数在前,大数在后. 2.当序列中存在多个同样大小的数时,输出序列中仅保留一个. 举例: 输入序列A:76,92,34,34,59,16,59,45 符合要求的输出序列B:16,34,45,59,76,92 约束: 1.输入的序列至少含有一个整型数,否则应该返回null: 2.输入序列中的整数值使用int类型: 接口说明 /******************

(华为机试)双向链表实现字符串条件表达式的求值

描述: 给定一个以字符串形式表示的算术表达式,计算该表达式的值. 表达式支持如下运算:"+.-.*./",其中"*"和"/"的优先级要高于"+"和"-": 不需要考虑括号,且表达式之间没有空格: 例如:对于表达式"3-2+15*2",该表达式值为31. 运行时间限制: 60 Sec 内存限制: 256 MByte 输入: 加减乘除四则运算表达式,长度不超过1024字节,运算式中不含有括号

华为机试(4)

中级题  题目描述  输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序.     输入描述 :10个正整数,保证都在int范围内,用空格隔开   输出描述  :10个数字,其从大到小的值,用空格隔开,最后一个数字后不加空格  输入样例 :11 3 2 4 5 9 8 7 10 6  输出样例  :10 2 11 3 4 5 6 7 8 9  解题思路:调用C++自带的sort函数,重新改写compare函数即可. #include<string> #include&l

[华为机试]输入数字的汉语拼音,每个拼音的首字母大写。输出该数字的阿拉伯数字。

//输入数字的汉语拼音,每个拼音的首字母大写.输出该数字的阿拉伯数字. //JiuBaiJiuShiJiu -> 999 #include<stdio.h> #include<string.h> int result = 0; void add(int n,char wei[]) { if(strcmp(wei,"Wan") == 0) result = result + n * 10000; else if(strcmp(wei,"Qian&q

华为机试—介绍、剖析、建议

一.华为机试介绍 1.大致介绍 时间:120分钟 环境:Visual Studio(去年是vs2005).Visual C++.VC 6.0.Eclipse(Java) 题量:共3题 初级题--60分--3组测试数据 中级题--100分--5组测试数据 高级题--160分--8组测试数据 注:初级题和中级题为必答题,高级题为附加题. 提交次数:每题最多5次 评判方式:按通过测试数据组数给分,每通过一组得20分 2.考试说明 这里有一个老版的机试考试说明,供大家参考: C/C++,JAVA机试流程

华为机试(3)

简单题   题目描述   输入一个数字,将其倒序输出,并输出其各个位上的乘积   输入描述  : 一个正整数,保证在int范围内   输出描述  : 两个数字,用空格隔开,第一个数字为其倒序的值,第二个数字是各个位上的乘积  输入样例  :134   输出样例  :431 12  解题思路:删繁就简,直接当字符串读入,处理就简单多了.  PS:此处不用纠结于题意,没有特别强调是按照一个数的格式输出,因此可以有前导0 void main() { int d; cin>>d; ostringstr

华为机试(5)

中级题  题目描述  你有一个容量为100的箩筐,给你30个物品,每个物品的体积已知问:最多能装多少个物品进箩筐  输入描述  :一行30个正整数,用空格隔开,表示每个物品的体积  输出描述  :一个数字,为最多能装下的物品数 输入样例(此处用3个物品作为样例,实际读入为30个)  :5 59 100  输出样例  :2 解题思路:利用性价比对所有物品进行排序,优先装性价比高的,在此题中,性价比就是物品的体积 #include<algorithm>//sort函数 #include<io