乐见科技笔试code

写一个输入整数参数【userLevel】和一个由特定数据结构构成的数组【InputArray】(数组长度在500~1000),经过以下排序规则进行排序后,输出排序后的数组【SortedArray】。限定使用 Lua、C/C++、JavaScript这三种Cocos2d常用编程语言进行编写。
说明:
这个特定数据结构为
itemData:{
itemId : number/int,
buyPrice : number/float,
createTime : string/datetime
}
比如这个数值是itemData的一个实例 {itemId = 123, createTime = ‘2019-01-23 12:30:00’, buyPrice = 345.0}

排序规则如下:
1.先判断额外的参数【userLevel】是否大于等于3,如果是的话先按照【itemData.createTime】倒序排序,即时间越靠后排序越靠前,如果两个数据的【itemData.createTime】相等,再按照【itemData.itemId】顺序排序,即【itemData.itemId】越小越靠前。
2.如果额外的参数【userLevel】小于3,则先按照【itemData.buyPrice】顺序排序,即价格越低排序越靠前,如果两个数据的【itemData.buyPrice】相等,再按照【itemData.itemId】倒序排序,即【itemData.itemId】越大越靠前。
3.提示,itemId具有唯一性,不存在两个相等的itemId。

举例: 比如【InputArray】有以下几条数据,
{itemId = 121, createTime = '2019-01-23 12:30:00', buyPrice = 345.0}
{itemId = 122, createTime = '2019-01-23 12:30:00', buyPrice = 123.0}
{itemId = 123, createTime = '2019-03-01 12:30:00', buyPrice = 123.0}

当【userLevel】>= 3时,输出以下结果
{itemId = 123, createTime = '2019-03-01 12:30:00', buyPrice = 123.0}
{itemId = 121, createTime = '2019-01-23 12:30:00', buyPrice = 345.0}
{itemId = 122, createTime = '2019-01-23 12:30:00', buyPrice = 123.0}

当【userLevel】< 3时,输出以下结果
{itemId = 123, createTime = '2019-03-01 12:30:00', buyPrice = 123.0}
{itemId = 122, createTime = '2019-01-23 12:30:00', buyPrice = 123.0}
{itemId = 121, createTime = '2019-01-23 12:30:00', buyPrice = 345.0}

// 自己写的,就觉得c++ 时间转换这个很有意思

#include<stdio.h>
#include<iostream>
#include<windows.h>
#include<string>
#include<stdlib.h>
#include<vector>
#include<ctime>
#include<time.h>
#include<queue>
using namespace std;

const double EXP = 1e-6;

struct listData {
	int itemId;
	double buyPrice;
	string  createTime;
};

time_t StringToDatetime(string str)
 {
	     char *cha = (char*)str.data();             // 将string转换成char*。
	     tm tm_;                                    // 定义tm结构体。
	     int year, month, day, hour, minute, second;// 定义时间的各个int临时变量。
	     sscanf_s(cha, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second);// 将string存储的日期时间,转换为int临时变量。
	     tm_.tm_year = year - 1900;                 // 年,由于tm结构体存储的是从1900年开始的时间,所以tm_year为int临时变量减去1900。
	     tm_.tm_mon = month - 1;                    // 月,由于tm结构体的月份存储范围为0-11,所以tm_mon为int临时变量减去1。
	     tm_.tm_mday = day;                         // 日。
	     tm_.tm_hour = hour;                        // 时。
	     tm_.tm_min = minute;                       // 分。
	     tm_.tm_sec = second;                       // 秒。
	     tm_.tm_isdst = 0;                          // 非夏令时。
	     time_t t_ = mktime(&tm_);                  // 将tm结构体转换成time_t格式。
	     return t_;                                 // 返回值。 
}

bool cmp1(const listData a, const listData b) {
		if (abs(a.buyPrice - b.buyPrice) < EXP)//PRICE 相等
		{
			return a.itemId > b.itemId;// 越大越靠前
		}
		else
		{
			return a.buyPrice < b.buyPrice;
		}
	
}

bool cmp2(const listData a, const listData b) {
	if (StringToDatetime(a.createTime) == StringToDatetime(b.createTime))
	{
		return a.itemId < b.itemId;// 越小越靠前
	}
	else
	{
		return StringToDatetime(a.createTime) > StringToDatetime(b.createTime);
	}
}

int main()
{
	listData n_Data[3];
	vector<listData> InputArray;

	n_Data[0].itemId = 121;
	n_Data[0].createTime = "2019-01-23 12:30:00";
	n_Data[0].buyPrice = 345.0;

	n_Data[1].itemId = 122;
	n_Data[1].createTime = "2019-01-23 12:30:00";
	n_Data[1].buyPrice = 123.0;

	n_Data[2].itemId = 123;
	n_Data[2].createTime = "2019-03-01 12:30:00";
	n_Data[2].buyPrice = 123.0;

	
	for (int i = 0; i < 3; i++)
	{
		InputArray.push_back(n_Data[i]);
	}
	cout << "排序前" << endl;
	for (vector<listData>::iterator it = InputArray.begin(); it != InputArray.end(); it++){
		cout << "itemId: " << it->itemId << " createTime: " << it->createTime << " buyPrice: " << it->buyPrice << endl;
		
	}

	int userLevel;
	cout << "请输入需要排序的userLevel = ";
	cin >> userLevel;
	clock_t  now1 ,end1;
	now1 = clock();
	cout << "starttime:" << now1 << endl;
	if (userLevel < 3)
	{
		sort(InputArray.begin(), InputArray.end(), cmp1);
	}
	else
	{
		sort(InputArray.begin(), InputArray.end(), cmp2);
	}
	end1 = clock();
	cout << "sort needtime:" << end1 - now1 << endl;
	cout << "=============================" << endl;
	cout << "排序后" << endl;
	time_t now = time(0);
	cout << "starttime:" << now << endl;
	for (vector<listData>::iterator it = InputArray.begin(); it != InputArray.end(); it++){
		cout << "itemId: " << it->itemId << " createTime: " << it->createTime << " buyPrice: " << (double)it->buyPrice << endl;

	}
	time_t end = time(0);
	cout << "endttime:" << end << endl;
	cout << "print needtime:" << end - now<< endl;
	system("pause");
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值