Bootstrap

青少年软件编程(C语言)等级三级考试试题(2)

Minecraft

题目描述

Minecraft 是一个几乎无所不能的沙盒游戏,玩家可以利用游戏内的各种资源进行创造,搭建自己的世界。

在 Minecraft 中,基本的建筑元素是边长为 1 个单位的立方体,Tony 想用 N 个这种小立方体搭建一个长方体,并用他珍藏已久的贴纸对其进行装饰。

如果一张贴纸可以贴满小立方体的一个面。那么,他需要用掉多少张贴纸呢?

输入格式

一个整数 N,表示小明所拥有的小立方体的个数。N 不会超过 1000。

输出格式

一个整数,即小明最少用掉的贴纸有多少张。

样例

样例输入

复制
9

样例输出

复制
30
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int v;
	cin>>v;
	int mi = 9999999;
	for(int a = 1;a<=v;a++)
	{
		for(int b = 1;b<=v/a;b++)
		{
			int h = v/a/b;
			if(v == a*b*h)
			{
				int s = (a*b+a*h+b*h)*2;
				mi = min(mi,s);
			}
		}
	}
	cout<<mi;
	return 0;
}

谁是你的潜在朋友

题目描述

“臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。 首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M。同时,按照“臭味相投”的原则,和你喜欢读同一本书的人,就是你的潜在朋友。你现在的任务是从这份借阅记录中计算出每个人有几个潜在朋友。

输入格式

第一行两个整数N,M,2 <= N ,M<= 200。接下来有N行,第i(i = 1,2,…,N)行每一行有一个数,表示读者i-1最喜欢的图书的编号P(1<=P<=M)

输出格式

包括N行,每行一个数,第i行的数表示读者i有几个潜在朋友。如果i和任何人都没有共同喜欢的书,则输出“BeiJu”(即悲剧,^ ^)

样例

样例输入

复制
4 5
2
3
2
1

样例输出

复制
1
BeiJu
1
BeiJu
#include<iostream>
#include<iomanip>
using namespace std;
int a[210];
int cnt[210];
int n,m;
int main()
{
	cin>>n>>m;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
		cnt[a[i]]++;
	}
	for(int i = 0;i<n;i++)
	{
		if(cnt[a[i]]>1)
		{
			cout<<cnt[a[i]]-1<<endl;
		}
		else
		{
			cout<<"BeiJu"<<endl;
		}
	}
	return 0;
}

课程冲突 

题目描述

小 A 修了 n 门课程, 第 i 门课程是从第 ai 天一直上到第 bi 天。

定义两门课程的冲突程度为 : 有几天是这两门课程都要上的。

例如 a1=1,b1=3,a2=2,b2=4 时, 这两门课的冲突程度为 2。

现在你需要求的是这 n 门课中冲突程度最大的两门课的冲突程度。

输入格式

第一行一个正整数 n 表示课程数量。 接下来 n 行,每行两个正整数 ai,bi。 2 ≤ n≤ 1000, 1 ≤ ai ≤ bi ≤ 1000。

输出格式

输出一个整数表示最大的冲突程度。

样例

样例输入

复制
3
1 3
2 4
5 5

样例输出

复制
2
#include<iostream>
#include<iomanip>
using namespace std;
struct couers
{
	int sT;
	int eT;
};
couers a[1010];
int n;
int ma = -1;
int main()
{
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i].sT>>a[i].eT;
	}
	for(int i = 0;i<n-1;i++)
	{
		for(int j = 0;j<n-1-i;j++)
		{
			if(a[j].sT>a[j+1].sT)
			{
				swap(a[j],a[j+1]);
			}
		}
	}
	for(int i = 0;i<n;i++)
	{
		for(int j = i+1;j<n;j++)
		{
			if(a[i].eT>=a[j].sT)
			{
				int ct = min(a[i].eT,a[j].eT) - max(a[i].sT,a[j].sT) + 1;
				ma = max(ma,ct);
			}
		}
	}
	cout<<ma;
	return 0;
}

;