华为上机试题

这篇博客介绍了华为上机试题中的一道题目,涉及到输入处理和排序算法。代码实现了一个根据输入整数进行排序的函数printOrder,使用了列表数据结构辅助排序。博主强调了在机考中,输入输出格式的重要性可能远超算法本身,指出测试用例的缺失可能导致解题困难。
摘要由CSDN通过智能技术生成
题目描述:
某个打印机根据打印队列执行打印任务。打印任务分为九个优先级,分别用数字1~9表示,数字越大优先级越高。打印机每次从队列头部取出第一个任务A,然后检查队列余下任务中有没有比A优先级更高的任务,如果有比A优先级高的任务,则将任务A放到队列尾部,否则就执行任务A的打印。


请编写一个程序,根据输入的打印队列,输出实际的打印顺序。


输入描述:
函数原型:void printOrder(const int input[], int len, int output[])  输入参数input表示打印队列,为一个由整数1~9(优先级)组成的数组,数组索引0表示打印队列头部。对于C/C++,参数len表示input数组长度。可以假定输入参数总是合法有效的,input数组长度有可能为0,但不会是空指针。


输出描述:
输出为一个表示实际打印顺序的数组,其数组项为打印任务在输入数组中的索引值(从0开始)。Java通过返回值输出,C/C++通过输出参数output输出,可以假定为存放结果分配了足够的空间。


示例1
输入
9, 3, 5
输出

0, 2, 1


代码:

#include <iostream>
#include <stdio.h>
#include <list>
#include <vector>


using namespace std;


struct INPUT
{
int order;
int value;
};




void printOrder(const int input[], int len, int output[])
{
list<INPUT> tmplist;
int pos=0;
for (int i = 0; i < len; i++)
{
INPUT node;
node.order = i;
node.value = input[i];
tmplist.push_back(node);
}


while (tmplist.size() > 0)
{
bool flag = 0;
INPUT head = tmplist.front();
list<INPUT>::iterator it;
for (it = tmplist.begin(); it != tmplist.end(); ++it)
{
if (head.value < it->value)
{
flag = 1;
break;
}
}
if (flag)
{
tmplist.pop_front();
tmplist.push_back(head);
}
else
{
output[pos++]=head.order;
tmplist.pop_front();
}


}


return;
}


int main (void)
{
    int tmp;
    int num = 0;
    int input[100];
    int output[100];
    while((tmp=getchar())!='\n')
    {
        if(tmp<'0' || tmp>'9')
            continue;
        input[num] = tmp;
        num++;
    }
    printOrder(input, num, output);
    for(int i = 0 ; i < num-1; i++)
    {
        printf("%d,",output[i]);
    }
    cout << output[num-1];

}

ps:这种机考题是真滴难

算法只占能力的1%,考虑输入占了99%。

又不给个测试用例,哪里跪了都不知道

输入格式和输出格式才是这个考试的重中之重!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值