PAT (Basic) 1001~1005

1001. 害死人不偿命的(3n+1)猜想 (15)

#include <iostream>

using namespace std;

int main()
{
	int n;
	cin >> n;
	int tot = 0;
	while (n != 1)
	{
		if (n % 2 == 0)
			n /= 2;
		else
			n = (3 * n + 1) / 2;
		tot++;
	}
	cout << tot << endl;

	return 0;
}


1002. 写出这个数 (20)

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
	string str;
	cin >> str;
	int tot = 0;
	for (int i = 0; i < str.length(); i++)
		tot += str[i] - '0';
	vector<string> vs;
	while (tot)
	{
		switch (tot % 10)
		{
		case 0:
			vs.push_back("ling");
			break;
		case 1:
			vs.push_back("yi");
			break;
		case 2:
			vs.push_back("er");
			break;
		case 3:
			vs.push_back("san");
			break;
		case 4:
			vs.push_back("si");
			break;
		case 5:
			vs.push_back("wu");
			break;
		case 6:
			vs.push_back("liu");
			break;
		case 7:
			vs.push_back("qi");
			break;
		case 8:
			vs.push_back("ba");
			break;
		case 9:
			vs.push_back("jiu");
			break;
		}
		tot /= 10;
	}
	vector<string> ::reverse_iterator it = vs.rbegin();
	cout << *it;
	++it;
	for (; it != vs.rend(); ++it)
		cout << " " << *it;
	cout << endl;

	return 0;
}


1003. 我要通过!(20)

说明:
1、把可以通过字符串以aPbTc表示,a,c分别表示A*(A的闭包),其中b表示A+(A的飞空闭包),则a,b,c中A的个数满足关系len(a) * len(b) = len(c)
(参考:http://blog.csdn.net/liygcheng/article/details/10590585);
2、string::npos,表示没有找到,no position,值跟平台有关,一般等于-1;
3、之前浙大2010年考研复试机试题题ZOJ问题,跟这个如出一辙。
#include <iostream>
#include <string>

using namespace std;

bool judge(string s)
{
	int p = s.find_first_not_of('A');
	if ((p == string::npos) || (s[p] != 'P'))
		return false;

	int t = s.find_first_not_of('A', p + 1);
	if ((t == string::npos) || (t == p + 1) || (s[t] != 'T'))
		return false;

	int n = s.find_first_not_of('A', t + 1);
	if (n != string::npos)
		return false;

	if ((s.length() - t - 1) == p * (t - p - 1))
		return true;
	else
		return false;

}

int main()
{
	int n;
	cin >> n;
	while (n--)
	{
		string s;
		cin >> s;
		if (judge(s))
			cout << "YES" << endl;
		else
			cout << "NO" << endl;
	}

	return 0;
}


1004. 成绩排名 (20)

#include <iostream>
#include <string>

using namespace std;

int main()
{
	int n;
	cin >> n;
	string max_name, max_id, min_name, min_id, name, id;
	int max_grade, min_grade, grade;

	cin >> name >> id >> grade;
	max_name = min_name = name;
	max_id = min_id = id;
	max_grade = min_grade = grade;
	for (int i = 0; i < n - 1; i++)
	{
		cin >> name >> id >> grade;
		if (grade > max_grade)
		{
			max_name = name;
			max_id = id;
			max_grade = grade;
		}
		if (grade < min_grade)
		{
			min_name = name;
			min_id = id;
			max_grade = grade;
		}
	}
	cout << max_name << " " << max_id << endl;
	cout << min_name << " " << min_id << endl;

	return 0;
}


1005. 继续(3n+1)猜想 (25)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>

using namespace std;

vector<bool> vec;

int main()
{
//	freopen("in.txt", "r", stdin);
	int K;
	cin >> K;
	vec.resize(101);
	int n;
	for (int i = 0; i < K; i++)
	{
		cin >> n;
		vec[n] = true;
	}
	for (int i = 2; i < 101; i++)
	{
		if (vec[i])
		{
			int tmp = i;
			while (tmp != 1)
			{
				if (tmp % 2 == 0)
					tmp /= 2;
				else
					tmp = (tmp * 3 + 1) / 2;
				vec[tmp] = false;
			}
		}
	}
	int first = true;
	for (int i = 100; i >= 2; i--)
	{
		if (first && vec[i])
		{
			cout << i;
			first = false;
			continue;
		}
		if (vec[i])
		{
			cout << " " << i;
		}
	}
	cout << endl;

	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值