首页 > 试题广场 >

价格浮动

[编程题]价格浮动
  • 热度指数:253 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
股市有风险,投资需谨慎!为了更好地把握股票市场,证券公司决定研究股票涨跌幅度与时间段的关系。他们能为你提供一天中每小时整点时刻的股票涨跌幅度,它们都是整数,正数表示上涨,负数表示下跌。请你按照幅度变化的大小倒续输出时间。

输入描述:
输入包含多组数据。

每一组数据一行,包含24个整数,分别代表00:00、01:00、……、23:00,这24个时间点的股票变化幅度。每个整数之间用一个空格隔开。


输出描述:
对应每一组数据,按问题描述的规则以一定顺序输出一行0、1、……、23,这24个时间。整数之间用空格隔开。

如果有两个时刻涨跌幅度相同,则按照时间先后顺序输出。
示例1

输入

-11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

输出

23 0 22 1 21 2 20 3 19 4 18 5 17 6 16 7 15 8 14 9 13 10 12 11
23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
思想很简单,无非利用map进行键值的递减排序,如果值一样就按照键的升序排序,然后要吐槽
下牛客的OJ,mdzz!!!我本来直接输出一个时间,输出空格,然后一直提醒我空格格式不对,
我快疯了,然后发现,在最后一个时间输出时不能加空格,mdzz!所以加了如下代码
 if(i < list.size() - 1) System.out.print(" ");

import java.util.*;
public class Main{
        
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){

            Map<Integer, Integer> stock = new HashMap();
            
            for(int i = 0; i < 24; i++)
                stock.put(i, Math.abs(in.nextInt()));
            
            List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(stock.entrySet()); 

			Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>(){
                //降序排序
                public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer,Integer> o2) {
                    int m = o2.getValue().compareTo(o1.getValue());
                    int n = m == 0 ? o1.getKey() - o2.getKey() : m;
                    return n;           
                }            
        	});
            for(int i = 0; i < list.size(); i++){
            	System.out.print(list.get(i).getKey());     
                if(i < list.size() - 1)
                     System.out.print(" ");
            }                   
                     
            System.out.println();
        }
    }
}

发表于 2017-02-04 15:15:44 回复(0)
更多回答
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<functional>
#include <map>
#include <set>
#include <unordered_set>
#include <unordered_map>
#include <exception>
#include <iomanip>
#include <memory>
#include <sstream>

#define INF 1000000
using namespace std;

int main(int argc, char** argv)
{
	//freopen("in.txt", "r", stdin);
	int change;
	while (cin >> change)
	{
		vector<pair<int, int>> hours;
		hours.reserve(24);
		hours.emplace_back(abs(change), 0);
		for (int i = 1; i <= 23; ++i)
		{
			cin >> change;
			hours.emplace_back(abs(change), i);
		}
		sort(hours.begin(),hours.end(),
			[](const pair<int,int>& pr1, const pair<int,int>& pr2)
			{
				return pr1.first > pr2.first ||
					pr1.first == pr2.first && pr1.second < pr2.second;
			});

		for (int i = 0; i <= 22; ++i) cout << hours[i].second << " ";
		cout << hours[23].second << endl;
	}
	return 0;
}

发表于 2017-07-13 10:24:35 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNext()){
            boolean[] flag=new boolean[24];
            int[] price=new int[24];
            for(int i=0;i<24;i++){
                price[i]=scanner.nextInt();
                flag[i]=true;
            }
            for(int i=0;i<24;i++){
                int max=-1;
                int index=-1;
                for(int j=0;j<24;j++){
                    if(Math.abs(price[j])>max && flag[j]){
                        index=j;
                        max=Math.abs(price[j]);
                    }
                }
                flag[index]=false;
                System.out.print(index+" ");
            }
            System.out.println();
        }
    }
} 

发表于 2018-09-19 15:58:47 回复(0)
没明白题目意思!!输入输出也看不懂。
发表于 2017-06-08 08:13:54 回复(0)
都没用用python德玛
发表于 2019-09-30 11:21:26 回复(0)
// write your code here cpp
#include<bits/stdc++.h>
using namespace std;

bool cmp(pair<int, int> a, pair<int, int> b) {
    if (abs(a.first) > abs(b.first))
        return true;
    else if (abs(a.first) == abs(b.first))
        return a.second < b.second;
    else return false;
}

int main() {
    pair<int, int> arr[24];
    while (cin >> arr[0].first) {
        arr[0].second = 0;
        for (int i = 1; i < 24; ++i) {
            cin >> arr[i].first;
            arr[i].second = i;
        }
        sort(arr, arr + 24, cmp);
        for (int i = 0; i < 24; ++i) 
            cout << arr[i].second << ' ';
        cout << endl;
    }
    return 0;
}

发表于 2018-11-13 21:24:13 回复(0)
虽然在这里调试出问题,但是自己运行可以的,,,,,不知道什么鬼
#include "stdafx.h"
#include<iostream>
#include <vector>
#include <map>
#include <algorithm>
//#include<string>
#include <set>
using namespace std;
struct sta
{
    int time;
    int updown;
};
int cmp(sta &t1,sta &t2)

{
    if (abs(t1.updown)>abs(t2.updown))
        return 1;
    if (abs(t1.updown) == abs(t2.updown))
        return t1.time < t2.time;
    return 0;
}
int main()
{
    vector<sta> day(24);
    int val;
    for (int i = 0; i < 24; ++i)
    {
        day[i].time = i;
        cin >> val;
        day[i].updown = val;
    }
    sort(day.begin(), day.end(), cmp);
    for (int i = 0; i < 24; ++i)
        cout << day[i].time << " ";
    cout << endl;
    return 0;
}

发表于 2017-12-14 19:52:57 回复(0)
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
struct shares
{
    int ext;
    int times;
};
bool cmp(const shares&a1,const shares&a2 )
{
    if(a1.ext!=a2.ext)
        return a1.ext>a2.ext;
    else
        return a1.times<a2.times;
}
int main()
{
    int num;
    while(cin>>num)
    {
        vector<shares> day(24);
        day[0].ext=abs(num);
        day[0].times=0;
        for(int i=1;i<24;i++)
        {
            cin>>num;
            if(num<0)
                num=-num;
            day[i].ext=num;
            day[i].times=i;
        }
        sort(day.begin(),day.end(),cmp);
        for(int i=0;i<23;++i)
        {
            cout<<day[i].times<<" ";
        }
        cout<<day[23].times<<endl;
    }
    return 0;
}

发表于 2017-10-19 17:01:28 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNextLine()){
            String [] array = scanner.nextLine().split("\\s");
            getResult(array);
        }
    }

     static void getResult(String [] array) {
        int arr[]=new int[24];
        for (int i = 0; i <24 ; i++) {
            if (Integer.valueOf(array[i])<0){
                arr[i]=Integer.valueOf(array[i])*-1;
            }else{
                arr[i]=Integer.valueOf(array[i]);
            }
        }
        int min =0;
        for (int i = 0; i < 24; i++) {
            if (arr[i]<=min){
                min = arr[i];
            }
        }

        for (int j = 0; j < 24; j++) {
            int maxCount=-1;
            int max = min-1;
            for (int i = 0; i < 24; i++) {
                if (arr[i]>max){
                    max=arr[i];
                    maxCount=i;
                }
            }
            arr[maxCount]=min-1;
            if (j==0){
                System.out.print(maxCount);
            }else{
                System.out.print(" "+maxCount);
            }
        }
        System.out.println();
    }
}

发表于 2017-08-29 20:39:02 回复(0)
#include <iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
typedef struct
{
	vector<int> time;
	void sorttime()
	{
		sort(time.begin(), time.end());
	}
}node;
int main()
{
	int num;
	while (cin >> num)
	{
		map<int, node> data;
		if (num < 0)
			num = 0 - num;
		data[num].time.push_back(0);
		for (int i = 1; i < 24; i++)
		{
			cin >> num;
			if (num < 0)
				num = 0 - num;
			data[num].time.push_back(i);
		}
		int cnt = 0;
		for (map<int, node>::reverse_iterator it = data.rbegin(); it != data.rend(); it++)
		{
			it->second.sorttime();
			for (vector<int>::iterator k = it->second.time.begin(); k != it->second.time.end(); k++)
			{
				cout << *k;
				cnt++;
				if (cnt == 24)
				{
					cout << endl;
					break;
				}
				else
					cout << " ";
			}
		}
	}
	return 0;
}

发表于 2017-04-25 22:58:20 回复(0)
插入排序(随意选一个稳定的排序即可)
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

struct info { int delta, time; };

vector<info> solve(vector<int> & A)
{
	vector<info> list(24);
	for (int i = 0; i < 24; ++i)
	{
		list[i].delta = abs(A[i]);
		list[i].time = i;
	}

	info temp;
	for (int i = 1; i < 24; i++)
	{
		temp = list[i];
		int j;
		for (j = i; j > 0 && list[j - 1].delta < temp.delta; --j)
		{
			list[j] = list[j - 1];
		}
		list[j] = temp;
	}

	return list;
}

int main()
{
	int n;
	while (cin >> n && n)
	{
		vector<int> delta(24, n);
		vector<info> list;
		for (int i = 1; i < 24; ++i) cin >> delta[i];
		list = solve(delta);
		for (int i = 0; i < 24; ++i)
			cout << (i ? " " : "") << list[i].time;
		cout << endl;
	}
	return 0;
}

发表于 2015-12-17 22:40:33 回复(0)