2024年南京邮电大学计算机考研上机NOJ

PROB1001 A+B 问题 54.56%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

void solve()
{
	int a, b;
	cin >> a >> b;
	cout << a+b;
}

int main()
{
	solve();

	return 0;
}

PROB1002 求最值问题 22.49%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

void solve()
{
	vector<int> arr;
	int n;
	int item;
	while(cin >> n)
	{
		arr.clear();
		for(int i = 0; i < n; i++)
		{
			cin >> item;
			arr.push_back(item);
		}
		sort(arr.begin(), arr.end());

		cout << arr[n-1] << " " << arr[0] << endl;

	}
}

int main()
{
	solve();

	return 0;
}

PROB1003 新对称素数问题 13.96%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>

bool is_prime(int n)
{
	if(n <= 1)
		return false;
	if(n==2)
		return true;
	for(int k = 2; k < n /2; k++)
	{
		if(n % k == 0)
			return false;
	}
	return true;
}

bool duichen(int n)
{

	string s = to_string((long long )n);

	int i = 0;
	int j = s.length() -1;
	while(i < j){
		if(s[i++] != s[j--])
			return false;
	}
	return true;
}

void solve()
{
	int n;
	cin >> n;
	int* arr = new int[n];
	for(int i = 0; i < n; i++)
		cin >> arr[i];

	for(int i = 0; i < n; i++)
	{
		if(arr[i] < 100000 && is_prime(arr[i]) && duichen(arr[i]))
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
		
	
}

int main()
{
	solve();

	return 0;
}

PROB1004 进制转换 20.98%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>

map<string, string> m;





string convert(int n, int w)
{
	string ans;
	string sign = "";
	if(n == 0)
		return "0";
	else if(n < 0)
	{
		sign = "-";	
		n = -n;
	}
	while(n > 0)
	{
		long long i = n % w;
		n /= w;
		ans = m[to_string(i)] + ans;
	}

	ans = sign + ans;
	return ans;




}

void solve()
{
	int n;
	cin >> n;
	vector<pair<int, int>> arr;
	int value;
	int jinzhi;
	for(int i = 0; i < n; i++)
	{
		cin >> value >> jinzhi;
		arr.push_back(make_pair(value, jinzhi));
	}

	for(int i = 0; i < n ; i++)
	{
		value = arr[i].first;
		jinzhi = arr[i].second;

		cout << convert(value, jinzhi) << endl;
	}
}

int main()
{
	m["0"] = "0";
	m["1"] = "1";
	m["2"] = "2";
	m["3"] = "3";
	m["4"] = "4";
	m["5"] = "5";
	m["6"] = "6";
	m["7"] = "7";
	m["8"] = "8";
	m["9"] = "9";
	m["10"] = "A";
	m["11"] = "B";
	m["12"] = "C";
	m["13"] = "D";
	m["14"] = "E";
	m["15"] = "F";
	solve();

	return 0;
}

PROB1005 涂色问题 22.02%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

void solve()
{
	int a, b, c, d;
	double avg;
	cin >> a >> b >> c >> d;

	if(a == b && a == c && a == d && b == c && b == d && c == d){
		cout << "B";
		return;
	}

	avg = (a+b+c+d)/4.0;

	int chang = 0;
	int duan = 0;
	if(a > avg)
		chang++;
	if(b > avg)
		chang++;
	if(c > avg)
		chang++;
	if(d > avg)
		chang++;

	if(a < avg)
		duan++;
	if(b < avg)
		duan++;
	if(c < avg)
		duan++;
	if(d < avg)
		duan++;

	if(chang == 3){
		if(a < avg){cout << "A"; return;}
			
		if(b < avg){cout << "B"; return;}
		if(c < avg){cout << "C"; return;}
		if(d < avg){cout << "D"; return;}
	}

	else if(duan == 3){
		if(a > avg){cout << "A"; return;}
			
		if(b > avg){cout << "B"; return;}
		if(c > avg){cout << "C"; return;}
		if(d > avg){cout << "D"; return;}
	}

	else{cout << "C";}


}

int main()
{
	solve();


	return 0;
}

PROB1006 最大公约数和最小公倍数 45.01%

// 直接调库

#include<bits/stdc++.h>
using namespace std;


int main()
{
	int m, n;
	cin >> m >> n;
	cout << gcd(m,n) << " " << lcm(m,n) << endl;
}

PROB1007 斐波那契数列 47.37%

#include <iostream>
using namespace std;

int fib(int n){
	if(n == 0)
		return 0;
	else if(n == 1)
		return 1;
	return fib(n-1) + fib(n-2);

}

int main(){

	int n;
	cin >> n;

	cout << fib(n);


	return 0;
}

PROB1008 回文回文 24.7%

#include <iostream>
using namespace std;
#include <string>

int main()
{

	string s;

	cin >> s;

	int i = 0;
	int j = s.length() - 1;

	while(i < j)
	{
		if(!(s[i] == s[j] || s[i]-s[j] == 32 || s[i] - s[j] == -32))
		{
			
			cout << "No";
			return 0;

		}
		i++;
			j--;

	}


	cout << "Yes";


	return 0;

}

PROB1009 单源最短路 22.89%

在这里插入代码片

PROB1010 萌萌摘苹果 48.44%

#include <iostream>
using namespace std;
#include <string>

int main()
{
	int n;
	int h;
	cin >> n;

	int* arr = new int[n];

	for(int i = 0; i < n; i++)
	{
		cin >> arr[i];
	}

	cin >> h;

	int num = 0;

	for(int i = 0; i < n; i++)
	{
		if(h + 30 >= arr[i])
			num++;
	}

	cout << num << endl;
	if(num == n)
		cout << "Yes";
	else
		cout << "No";

	cin >> h;


	

	return 0;
}

PROB1011 忠诚的骑士 48.91%

#include <iostream>
using namespace std;
#include <string>

int main()
{
	int n;
	cin >> n;

	
	int i = 1;
	int sum = 0;

	while(i*(i+1)/2 <= n){
		sum += i*i;
		i++;
		
	}

	// i = 4

	int left = n - i*(i-1)/2;

	sum += left* i; 
	cout << sum;

	return 0;
}

PROB1012 最小质数合数之和问题 20.21%

#include <iostream>
using namespace std;
#include <string>
#include <cmath>
#include <algorithm>

bool is_prime(double n)
{
	for(int i = 2; i < int(sqrt(n)); i++)
	{
		if(int(n) % i == 0)
			return false;
	}
	return true;

}

int main()
{
	int n;
	cin >> n;

	if(n == 1)
	{
		cout << 6;
		return 0;
	}

	

	int s1;
	int s2;
	int ans;

	for(int i = n + 1; ;i++)
	{
		if(!is_prime(i)){
		s1 = i;
		break;}
	}

	for(int i = n + 1; ;i++)
	{
		if(is_prime(i)){
		s2 = i;
		
		break;}
		
	}

	cout << s1+s2;
	

	

	return 0;
}

PROB1014 级数求和 35.11%

#include <iostream>
using namespace std;

int main(){
	int k = 0;

	cin >> k;

	double sum = 0;

    

	int i = 0;

	while(sum <= k){
        i++;
		sum += 1.0/i;
	}

	cout << i;

	return 0;
}

PROB1015 小明与选择题 22.99%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

void solve()
{
	int a, b, c, d;
	cin >> a >> b >> c >> d;
	double avg = (a + b +c + d)/4.0;

	if(a == b && a == c && a == d && b == c && b == d && c==d){
		cout << "B";
		return ;
	}

	

	
	int Long = 0;
	int Short = 0;

	if(a > avg)
		Long++;
	if(a < avg)
		Short++;

	if(b > avg)
		Long++;
	if(b < avg)
		Short++;

	if(c > avg)
		Long++;
	if(c < avg)
		Short++;

	if(d > avg)
		Long++;
	if(d < avg)
		Short++;

	if(Long == 3)
	{
		if(a < avg)
			cout << "A";
		else if(b < avg)
			cout << "B";
		else if(c < avg)
			cout << "C";
		else 
			cout << "D";

		return ;
	}

	if(Short == 3)
	{
		if(a > avg)
			cout << "A";
		else if(b > avg)
			cout << "B";
		else if(c > avg)
			cout << "C";
		else 
			cout << "D";

		return;
	}

	cout << "C";
	

}

int main()
{
	solve();

	return 0;
}

PROB1017 小明喝可乐 41.93%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

int solve()
{
	
	int n;
	int k;
	cin >> n >> k;

	int empty = n;
	int sum = n;

	while(empty >= k)
	{
		sum += empty / k;
		empty = empty % k + empty / k;
	}

	return sum;
}

int main()
{
	
	cout << solve();
	return 0;
}

PROB1018 华强种瓜 24.21%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <set>



bool is_in_range(int ii, int jj, int i, int j, int r)
{
	
	return (ii-i)*(ii-i) + (jj-j)*(jj-j) <= r*r;
}

void solve()
{
	set<pair<int, int>> point;
	vector<pair<int, int>> water_tool;
	int n, water_tool_num, r;
	cin >> n >> water_tool_num >> r;

	

	int x, y;

	for(int i = 0; i < water_tool_num; i++)
	{
		cin >> x >> y;
		water_tool.push_back(make_pair(x, y));
	}

	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= n; j++)
		{
			for(int k = 0; k < water_tool_num; k++)
			{
				if(is_in_range(i, j, water_tool[k].first, water_tool[k].second, r))
				{
					point.insert(make_pair(i, j));
				}
			}
		}
	
	}

	cout << point.size();

	

	

}

int main()
{
	solve();

	return 0;
}

PROB1019 天子与诸侯 41.98%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

// 从大到小
bool func(int a, int b)
{
	return a > b;
}

void solve()
{
	int n;
	cin >> n;

	int* arr = new int[n];
	

	for(int i = 0; i < n; i++)
		cin >> arr[i];

	sort(arr, arr+n, func);

	cout << arr[0] + arr[1] + arr[2];
}

int main()
{
	solve();

	return 0;
}

PROB1020 矩阵变换问题 22.74%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

void solve()
{
	int m, n;
	cin >> m >> n;

	
	vector<int> row(m, 0);
	vector<int> col(n, 0);

	

	vector<vector<int>> arr(m, vector<int>(n, 0));

	for(int i = 0; i < m; i++){
		for(int j = 0; j < n; j++){
			cin >> arr[i][j];
			if(arr[i][j] == 1){
				row[i] = 1;
				col[j] = 1;
			}
		}
	}


	for(int i = 0; i < m; i++){
		if(row[i] == 1){
			arr[i] = vector<int>(n, 0);
		}
	}

	for(int j = 0; j < n; j++){
		if(col[j] == 1){
			for(int i = 0; i < m; i++){
				arr[i][j] = 0;
			}
		}
	}

	for(int i = 0; i < m; i++){
		for(int j = 0; j < n; j++){
			cout << arr[i][j];
			if(j != n-1)
				cout << " ";
			else
				cout << endl;
		}
	}






}

int main()
{
	solve();

	return 0;
}

PROB1021 小明的记忆游戏 14.46%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

void solve()
{
	int n;
	cin >> n;
	
	set<int> s;
	int nnn;
	for(int i = 0; i < n; i++)
	{
		cin >> nnn;
		s.insert(nnn);
	}

	int m;
	cin >> m;
	int* ques = new int[m];
	for(int i = 0; i < m; i++)
	{
		cin >> ques[i];
	}

	for(int i = 0; i < m; i++)
	{
		nnn = ques[i];
		if(s.find(nnn) != s.end())
			cout << "YES\n";
		else 
			cout << "NO\n";
	}

	
}

int main()
{
	solve();

	return 0;
}

PROB1022 小明算树 39.96%

#include <iostream>
#include <set>
using namespace std;


int main(){

	// 马路长度
	int L;

	// 区间数量
	int m;

	// 统计要移除所有树(set自动去重)
	set<int> s;

	cin >> L >> m;

	// 初始树的数量为 L + 1
	int num = L + 1;

	int start;
	int end;

	for(int i = 0; i < m; i++){
		cin >> start >> end;
		for(int j = start; j <= end; j++){
			s.insert(j);
		}
	
	}

	// 结果为 初始树数量 - 要移除的数量
	cout << num - s.size();


	return 0;
}

PROB1023 小明的抽奖游戏 33.21%

#include <iostream>
using namespace std;

bool is_ok(int num, int* prize, int len){
	for(int i = 0; i < len; i++){
		if(num % prize[i] == 0){
			return true;
		}
	}
	return false;
}

int main()
{
	int n;
	int m;
	cin >> n;

	int* lucky = new int[n];

	for(int i = 0; i < n; i++){
		cin >> lucky[i];
	}


	cin >> m;
	
	int* prize = new int[m];

	for(int i = 0; i < m; i++){
		cin >> prize[i];
	}

	int ans = 0;

	for(int i = 0; i < n; i++){
		if(is_ok(lucky[i], prize, m)){
			ans++;
		}
	}


	cout << ans;






	return 0;
}

PROB1024 小明算分 31.76%

#include <iostream>
using namespace std;
#include <algorithm>


int main(){
	int n;
	int m;

	double max_score = 0;

	cin >> n >> m;

	int* arr = new int[m];

	for(int i = 0; i < n; i++){
		int sum = 0;
		for(int j = 0; j < m; j++){
			cin >> arr[j];
			sum += arr[j];
		}
		sort(arr, arr+m);

		// 减去最值
		sum = sum - arr[0] - arr[m-1];

		double score = double(sum) / (m - 2);

		if(score > max_score){
			max_score = score;
		}
	}

	printf("%.2f", max_score);

	return 0;
}

PROB1025 开普勒星球历法 40.23%

#include <iostream>
#include <string>
using namespace std;
//int arr_normal[]

int month_normal[14] = {
	31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 395, 426
};

int month_odd[14] = {
	31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 396, 427
};

bool year(int n){
	if(n % 100 == 0 && n% 400 != 0){
		return false;
	}
	if(n%4==0){
		return true;
	}
	return false;
}



int main(){

    int n;
	int y;

	cin >> y >> n;

	bool ans =  year(y);

	
	// 闰年
	int month, day ;
	//int month_odd[14] = {
	//31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 395, 426
	if(!ans){

	
		// 1
		if(n >= 1 && n <= 31){
			month = 1;
			day = n;
		}// 2
		else if(n >= 32 && n <= 59){
			month = 2;
			day = n-31;
		}// 3
		else if(n >= 60 && n <= 90){
			month = 3;
			day = n-59;
		} // 4
		else if(n >= 91 && n <= 120){
			month = 4;
			day = n-90;
		}// 5
		else if(n >= 121 && n <= 151){
			month = 5;
			day = n-120;
		}
		else if(n >= 152 && n <= 181){
			month = 6;
			day = n-151;
		}
		else if(n >= 182 && n <= 212){
			month = 7;
			day = n-181;
		}
		else if(n >= 213 && n <= 243){
			month = 8;
			day = n-212;
		}else if(n >= 244 && n <= 273){
			month = 9;
			day = n-243;
		}
		else if(n >= 274 && n <= 304){
			month = 10;
			day = n-273;
		}
		else if(n >= 305 && n <= 334){
			month = 11;
			day = n-304;
		}
		else if(n >= 335 && n <= 365){
			month = 12;
			day = n-334;
		}
		else if(n >= 366 && n <= 395){
			month = 13;
			day = n-365;
		}else if(n >= 396 && n <= 426){
			month = 14;
			day = n-395;
		}

	}

	else{

		// 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 396, 427
		
		if(n >= 1 && n <= 31){
		month = 1;
		day = n;
	}// 2
	else if(n >= 32 && n <= 60){
		month = 2;
		day = n-31;
	}// 3
	else if(n >= 60 && n <= 91){
		month = 3;
		day = n-59;
	} // 4
	else if(n >= 92 && n <= 121){
		month = 4;
		day = n-91;
	}// 5
	else if(n >= 122 && n <= 151+1){
		month = 5;
		day = n-120-1;
	}
	else if(n >= 152+1 && n <= 181+1){
		month = 6;
		day = n-151-1;
	}
	else if(n >= 182+1 && n <= 212+1){
		month = 7;
		day = n-181-1;
	}
	else if(n >= 213+1 && n <= 243+1){
		month = 8;
		day = n-212-1;
	}else if(n >= 244+1 && n <= 273+1){
		month = 9;
		day = n-243-1;
	}
	else if(n >= 274+1 && n <= 304+1){
		month = 10;
		day = n-273-1;
	}
	else if(n >= 305+1 && n <= 334+1){
		month = 11;
		day = n-304-1;
	}
	else if(n >= 335 +1&& n <= 365+1){
		month = 12;
		day = n-334-1;
	}
	else if(n >= 366+1 && n <= 395+1){
		month = 13;
		day = n-365-1;
	}else if(n >= 396+1 && n <= 426+1){
		month = 14;
		day = n-395-1;
	}
	}

	cout << month << " " << day;

    return 0;
}

PROB1026 子串计数 23.37%

#include <iostream>
#include <string>
using namespace std;

int get_count(const string& s, const string& q) {
    int count = 0;
    int pos = 0;
    while ((pos = s.find(q, pos)) != string::npos) {
        count++;
        pos++;
    }
    return count;
}

int main(){

    int n;

	cin >> n;

	string s1, s2;

	for(int i = 0; i < n; i++){
		cin >> s1 >> s2;
		cout << get_count(s1, s2) << endl;
	}

	

    return 0;
}

PROB1027 房屋装修 21.61%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

void solve()
{
	int n, m, a;
	cin >> n >> m >> a;
	cout << ((n+a-1)/a) * ((m+a-1)/a);
}

int main()
{
	solve();

	return 0;
}

PROB1028 最长连续上升子序列 42.66%

#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <map>
#include <set>

void solve()
{
	int n;
	cin >> n;

	vector<int> arr(n, 0);

	for(int i = 0; i < n; i++)
	{
		cin >> arr[i];
	}

	int ans = 1;
	int temp = 1;

	for(int i = 0; i < n; i++)
	{
		temp = 1;
		for(int j = i+1; j < n; j++)
		{
			if(arr[j] > arr[j-1])
				temp++;
			else 
				break;
		}
		if(temp > ans)
			ans = temp;
	}

	cout <<  ans;
}

int main()
{
	solve();

	return 0;
}
  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦是远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值