云南少儿C++编程竞赛——AI算法题目(答案)

一、big LITTLE

问题描述

为了应对灵活多变的市场需求,CPU厂家在规划产品时,往往预先设计一些核心模块和其他模块,根据市场需求把君干个模块组合起来作为一个型号生产和销售。Outel公司推出了第13代UncoreCPU。此系列CPU 有两类核心模块:一类是性能模块,每个模块目有1个性能核心,其线程数为2;另一类是能效模块,每个模块具有4个能效核心,每个能效核心的线程数为1(也就是说,单个能效模块的总线程数为 4)。输入一个 CPU 总核心模块数 M 和总线程数T,计算性能模块数 Mp 和能效模块数 ME。

输入格式

一行,两个整数 M和T,分别表示总核心模块和总线程数。(1<C<1000000000,2<T<2000000000,保证存在非负整数解)

输出格式

一行,两个整数 MP和 ME,分别表示性能模块数和能效模块数。

样例输入/输出

7 16
6 1

解释

6个性能模块,1个能效模块,总核心模块数为6+1=7,总线程数为6x2+1x4=16。

参考代码:
#include<iostream>
using namespace std;
int main()
{
	int m,t;
	cin>>m>>t;
	int x,y;
	y=(t-2*m)/2;
	x=m-y;
	cout<<x<<" "<<y;
	return 0;
}

二、猴子上楼梯

问题描述

顽皮的小猴子上楼梯,它可以一次走一级台阶,也可以一次走三级台阶,但绝不会一次走两级台阶。给定楼梯总台阶级数",求总共有多少种不同的上楼梯方案。

输入格式

一个正整数 n,表示楼梯的总台阶数。(n ≤ 50)

输出格式

一个正整数n,表示上楼梯方案数。

样例输入/输出
10
28

参考代码:
#include<iostream>
using namespace std;
long long f[55];
int main()
{
	f[0]=f[1]=f[2]=1;
	for(int i=3;i<=50;i++)
		f[i] = f[i-1]+f[i-3];
	int n;
	cin >> n;
	cout << f[n];
	return 0;
}

三、质数对

问题描述

给你一个长度为 n 的数组,请你计算有多少个下标对(i,j) 满足i<j 且 a[i]+ a[j]是质数。

输入格式

第一行一个数字n。(1≤n≤2000)
第二行n个数字。(任意一个数字ai 满足1≤ai≤ 100000)

输出格式

符合要求的质数对个数。

样例输入/输出

5

1 2 3 4 5

5
解释

符合条件的有(a[i],a[j])对有(1,2)、(1,4)、(2,3)、(2,5)、(3,4)。

参考代码:
#include<iostream>
using namespace std;
bool prime[200010];
int a[2005];
int main()
{
	for(int i=2;i<=200000;i++)	prime[i]=1;
	for(long long i=2;i<=200000;i++)
	{
		if(prime[i])
		{	for(long long j=i*i;j<=200000;j+=i)
				prime[j]=false;
		}
	}
	int n;
	cin >> n;
	for(int i=0;i<n; i++)
		cin >> a[i];
	int cnt=0;
	for(int i=0;i<n; i++)
	{
		for(int j=i+1; j<n; j++)
		{
			if(prime[a[i]+a[j]])
				cnt++;
		}
	}
	cout << cnt;
	return 0;
}

四、进制转换

问题描述

给定你两个数字x和y和一个字符串n,x代表字符串n的进制。
请输出n在y进制下的格式。

输入格式

第一行两个数字和一个字符申,分别代表x,y和n。(2≤x≤10,2≤y≤10,在x进制下n的数值满足0≤n≤(100 000)10)保证输入一定合法,且n不以0开头。

输出格式

一行一个数字,即y进制下的字符串 n。

样例输入/输出

4 5 12
11

解释

4进制下,字符串 12的真实值为6(6=1x4+2);在5进制下,6的字符串形式为11(6=1x5+1),对于n 建议用字符串输入。

参考代码:
#include<iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int bit[100];
int main() 
{
	int x,y,n;
	cin>>x>>y>>n;
	int to_10=0;
	int p=0;
	int sum = 0;
	while(n)
	{
		sum += n%10*pow(x,p++)+0.1;
		n/=10;	
	}
	p=0;
	while(sum)
	{
		bit[p++]= sum%y;
		sum/=y;
	}
	for(int i=p-1;i>=0;i--)
		cout << bit[i];
	return 0;
}

五、不平衡数

问题描述

        平衡树也叫 AVL,在 AVL 树中任意节点的两颗子树的最大高度差都不超过1。现在,Bob 自己定义了一个概念,叫做“不平衡树”

  1.  一个树的和 S= R+ SL+ SR,其中 R 表示根节点的值,SL和 SR分别表示左右子树的和。空树的和 S= 0。
  2. 若树有两个子树,则它的不平衡度U =|SL- SR|,即“左子树和”与“右子树和”的差的绝对值(大减小)。若树仅有一个子树,则它的不平衡度U=UL,(仅左子树,不平衡度等于左子树的不平衡度)或U=UR(仅右子树,不平衡度等于右子树的不平衡度)。若树没有子树,则它的不平衡度 U= 0。

        现在,我们会根据前序遍历的顺序给出树上每个节点的值,0 代表空节点,你要输出这个树上所有节点的最大不平衡度。

输入格式

第一行一个数字n,代表节点个数。(1≤n≤100000)
第二行共 2n+1个整数,代表前序遍历节点的值。 (0 表示空节点,非空节点值x 的范围满足 -100000<=x<0 或 0< x=< 100000)

输出格式

输出该树上所有节点的最大的不平衡度,

样例输入/输出

3 209 1 0 0 0 100 10 0 0 200 0 0
190

解释

按照前序遍历顺序,各个节点的和S依次为:520,210,1,310,10,200

按照前序遍历顺序,各个节点不平衡度U依次为:100,0,0,190,0,0。

参考代码:
#include<iostream>
#include<cmath>
using namespace std;
typedef struct TreeNode 
{
	int data;	//节点值
	int av1;	//不平衡值
	int sum;	//子数和
	TreeNode* Lchild;	//左孩子
	TreeNode* Rchild;	//右孩子
}*Tree, TreeNode;
int ans=0;
//前序创建二叉树
void CreateTree(Tree& T)
{
	int x;
	cin >> x;
	if(x==0)
	{
		T = NULL;
		return;
	} 
	else 
	{
		T= new TreeNode;
		T->data = x;
		CreateTree(T->Lchild);
		CreateTree(T->Rchild);
	}
}
void dfs(Tree& T)
{
	if(T->Lchild==NULL && T->Rchild==NULL)
	{
		T->av1 =0;
		T->sum = T->data;
	}
	else if(T->Lchild==NULL)
	{
		dfs(T->Rchild);
		T->sum =T->Rchild->sum + T->data;
		T->av1 =T->Rchild->av1;
	}
	else if(T->Rchild==NULL)
	{
		dfs(T->Lchild);
		T->sum =T->Lchild->sum+T->data;
		T->av1 =T->Lchild->av1;
	}
	else
	{
		dfs(T->Lchild);
		dfs(T->Rchild);
		T->sum =T->Lchild->sum + T->Rchild->sum + T->data;
		T->av1 = abs(T->Lchild->sum - T->Rchild->sum);
	}
	ans = max(ans,T->av1);
}
int main()
{
	Tree T;
	CreateTree(T);
	dfs(T);
	cout << ans;
	return 0;
}
//3 209 1 0 0 0 100 10 0 0 200 0 0

  • 35
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于少儿C编程学习的路线推荐,可以首先参考《少儿C 快乐编程》这本适合小学高年级以及中学生自学的编程教程。这本教程包含了C语言的所有基础知识,并通过实例教学的方式,让学生可以在家里进行学习,无需去昂贵的培训机构。每天学习一节课,可以提高学生的编程能力。 此外,还可以结合Scratch软件进行学习。Scratch是一款图形化编程语言,可以帮助学生更好地理解编程概念。通过使用Scratch,学生可以进行可视化的编程实践,从而培养对编程的兴趣和动手能力。然后逐渐过渡到C语言编程。 对于更进一步的学习,可以参考蓝桥杯青少组的C语言编程竞赛。蓝桥杯是国内著名的计算机竞赛,对于学生的编程能力提升有很大的帮助。可以根据蓝桥杯的学习路线图进行学习,并争取在五六年级时参加比赛并争取拿到CSP-J二三等奖。 综上所述,少儿C编程学习的推荐路线是从《少儿C 快乐编程》教材开始,结合Scratch软件进行图形化编程实践,然后参加蓝桥杯青少组的C语言编程竞赛。这样可以循序渐进地提高学生的编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [少儿C++快乐编程](https://download.csdn.net/download/weixin_26897585/19660391)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [少儿C++编程学习路线推荐(2022.10.31)](https://blog.csdn.net/dllglvzhenfeng/article/details/127613427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值