华为 2014 年 机试题一二

#include<iostream>
#include<stdio.h>
#include<vector>
#include<string>
#include<cstdlib>
using namespace std;
//
//
//第一题  去饭店吃饭 一个男人3元 一个女人2元 一个小孩1元   现输入总人数和总花费    
//问有几种不同的组合方式(必须至少有一个男人一个女人一个小孩)


//第二题  走廊上有n盏灯  按1到n序号顺序排好  刚开始都是关着的  现有n个人  编号1 
//到n  编号为1的人从走廊一端走到另一端 把编号是1的倍数的灯开关都动一下(开变 
//关,关变开)  接着编号是2的人把编号是2的倍数的灯开关都动一下。。。一直到第n个 
//人   输入n要求输出最后还有几盏灯是亮着的 
//
//第三题  输入两个字符串(都是字母)  a到z每个字母有一个权值(1-26) 不区分大小 
//写  哪个字母分配哪个权值由你决定  字符串的权值就是字符串中所有字母的权值之和   
//现要求自行分配权值 使得两个字符串的权值之差最大  输出最大权值之差(提示:先把 
//字符串中的相同字母去掉,再分配权值)

inline int charComp(const void* t1, const void* t2)
{
	return (  *(char*)t1 -*(char*)t2  );
}
inline int intComp(const void* t1, const void* t2)
{
	return  -(  *(int*)t1 -*(int*)t2  );
}


int main()
{

	// 1.
	//int pepleNum;
	//int costNum;
	//int money[4] = {0,1, 2,3};
	//int countMe=0;
	//while (scanf_s("%d%d", &pepleNum, &costNum)!= EOF)
	//{
	//	for (int i = 0; i <= pepleNum; i++)
	//	{
	//		for (int j = 0; j <= pepleNum; j++)
	//		{
	//			for (int k = 0; k <= pepleNum; k++)
	//			{
	//				if (i+j+k == pepleNum)
	//				{
	//					if (i*1+j*2+k*3 == costNum)
	//					{
	//						countMe++;
	//					}
	//				}
	//			}
	//		}
	//	}
	//	cout<<countMe<<endl;
	//}
	// 2. 
	//int num;
	//while (scanf_s("%d", &num))
	//{
	//	int result =0;
	//	vector<int>  tempVec(num+1, 0);
	//	for (int i = 1; i <= num; i++)
	//	{
	//		for (int j = i; j <= num; j=j+i)
	//		{
	//			if (tempVec[j] == 0)
	//				tempVec[j] = 1;
	//			else
	//				tempVec[j] =0;
	//		}
	//	}
	//	for (int i = 1; i <=num; i++)
	//	{
	//		result+= tempVec[i];
	//	}
	//	cout<<result<<endl;
	//}
	//3. 
	//char A[50];
	//char B[50];
	//while (scanf_s("%s%s", A, B)  !=EOF)
	//{
	string AA;
	string BB;
	while (cin>>AA&&cin>>BB)
	{
		// 1. sort
		char A[100];
		char B[100];
		int Anum = AA.size(); int Bnum =BB.size();
		int i = 0;
		while (i< Anum)
			A[i++] = AA[i];
		i= 0;
		while (i < Bnum)
			B[i++] = BB[i];

		qsort(A, Anum, sizeof(char), charComp);
		qsort(B, Bnum, sizeof(char), charComp);
		// 2.  remove the  same
		int j = 0; i = 0;
		int hashCharA[26] = {0};
		int hashCharB[26] ={0};
		while (i< Anum)
		{
			while (j < Bnum)
			{
				if (A[i] == B[j])
				{
					i++; j++;
				}
				else if (A[i] < B[j])
				{
					i++;
					int index = (int)A[i]-'a';
					hashCharA[index]++;
				}
				else
				{
					j++;
					int index = (int)B[i]-'a';
					hashCharB[index]++;
				}
			}
		}
		// sort the index num;
		qsort(hashCharA, 26,sizeof(int),  intComp);
		qsort(hashCharB,26, sizeof(int),  intComp);
		// result
		int result;
		int reuslt1= 0; int result2 = 0;
		for (int ii = 0; ii < 26; ii++)
		{
				reuslt1 += hashCharA[ii]*(26-ii) - hashCharB[ii]*(ii+1);
			     result2 +=  hashCharB[ii]*(26-ii) - hashCharA[ii]*(ii+1);
		}
		result = reuslt1>result2? reuslt1:result2;
		cout<< result<<endl;
	}
	return 0;
}


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值