矿大数据结构上机实践考题

ProblemA 求N以内的素数

题目描述:
求N以内(包括N)的素数。(N<=100000)
输入
N
输出
N以内的所有素数,一个素数占一行。
样例输入
100
样例输出
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

#include <iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	for(int i = 2;i<=n;i++){
		bool flag = true;
		for(int j = 2;j<=i/j;j++){
			if(i%j == 0){
				flag = false;
				break;
			}
		}
		if(flag)
		cout<<i<<endl;
	}
	return 0;
}
ProblemB 水仙花数

题目描述:
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,它是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=111+555+333
现在要求输出所有在m和n范围内的水仙花数。
输入:
两个整数m和n(100<=m<=n<=999)。
输出:
要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no。
样例输入
300 380
样例输出
370 371

#include <iostream>
using namespace std;
int main(){
	int m,n;
	cin>>m>>n;
	bool flag = false;
	for(int i = m;i<=n;i++){
		int a = i%10;
		int b = (i/10)%10;
		int c = i/100;
		if(a*a*a+b*b*b+c*c*c == i){
			flag = true;
			cout<<i<<" ";
		}
	}
	if(!flag)
	cout<<"no"<<endl;
} 
ProblemC 汽水瓶

题目描述:
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1≤n≤100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出 0
样例输入
3
10
81
0
样例输出
1
5
40

#include <iostream>
using namespace std;
int main(){
	int num;
	while(1){
		cin>>num;
		if(num == 0)
		break;
		if(num<3){
			cout<<0<<endl;
			return 0;
		}
		int sum = 0;
		while(num>=3){
			sum += num/3;
			num = num/3+num%3;
		}
		if(num == 2){
			sum += 1;
		}
		cout<<sum<<endl;
	} 
	return 0;
}
ProblemD 数列

题目描述:
小明今天在做数学题的时候碰到这样一个问题,一个数列的定义如下:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7。
现在给你A,B和n的值,请问你f(n)的值是多少?
输入:
输入包含多组测试数据。
每组输入3个整数A,B和n(1<=A,B<=1000,1<=n<=100000000),当输入的3个数都为0时,输入结束。
输出:
对于每组输入,输出f(n)的值。
样例输入
1 1 3
1 2 10
0 0 0
样例输出
2
5

#include <iostream>
using namespace std;
int func(int a,int b,int n){
	if(n == 1)
	return 1;
	else if(n == 2)
	return 1;
	else 
	return (a*func(a,b,n-1)+b*func(a,b,n-2))%7;
}
int main(){
	int a,b,n;
	while(1){
		cin>>a>>b>>n;
		if(a == 0)
		break;
		cout<<func(a,b,n)<<endl;
	}
	return 0;
}
ProblemE 二叉排序树的基本操作

题目描述:
二叉排序树或者是一棵空树,或者是具有以下几条性质的二叉树:

  1.   若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;
    
  2.   若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值;
    
  3.   它的左右子树也分别为二叉排序树。
    

二叉排序树又可以被称为二叉查找树,根据上述定义的结构不难知道,它的查找过程十分简单,只需要通过不断的将当前结点的值与需要查找的值进行比较,如果相等则直接输出,如果要查找的值更小则深入至左子树进行比较,否则就深入右子树进行比较,直到找到相应的值或者进入了一棵不存在的子树为止。
其查找过程可以描述如下:
输入:
输入的第一行包含2个正整数n和k,分别表示共有n个整数和k次查询。其中n不超过500,k同样不超过500。
第二行包含n个用空格隔开的正整数,表示n个整数。
第三行包含k个用空格隔开的正整数,表示k次查询的目标。
输出:
只有1行,包含k个整数,分别表示每一次的查询结果。如果在查询中找到了对应的整数,则输出1,否则输出0。
请在每个整数后输出一个空格,并请注意行尾输出换行。
样例输入
8 3
1 3 5 7 8 9 10 15
9 2 5
样例输出
1 0 1

#include <iostream>
using namespace std;
typedef struct BiTNode{
	int value;
	struct BiTNode *lchild,*rchild;
}*BiTree;
bool LT(int a,int b){
	if(a<b)
	return true;
	else
	return false;
}
bool search(BiTree root,int data,BiTree f,BiTree&p){
	if(!root){
		p = f;
		return false;
	}
	if(data == root->value){
		p = root;
		return true;
	}
	else if(data<root->value)
	return search(root->lchild,data,root,p);
	else if(data>root->value)
	return search(root->rchild,data,root,p);
}
void insert(BiTree&root,int data){
	BiTree p,s;
	if(!search(root,data,NULL,p)){
		s = new BiTNode;
		s->value = data;
		s->lchild = s->rchild = NULL;
		if(!p)root = s;
		else if(LT(data,p->value))
		p->lchild = s;
		else
		p->rchild = s;
	}
	return ;
}
void deletetree(BiTree root){
	if(root){
		deletetree(root->lchild);
		deletetree(root->rchild);
		delete root;
	}
}
int main(){
	int m,n;
	int num;
	cin>>m>>n;
	BiTree root = NULL;
	BiTree p;
	for(int i = 0;i<m;i++){
		cin>>num;
		insert(root,num);
	}
	for(int i = 0;i<n;i++){
		cin>>num;
		if(search(root,num,NULL,p))
		cout<<1<<" ";
		else
		cout<<0<<" ";
	}
	return 0;
}
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中的代码是一个用来构建螺旋阵的程序,通过输入一个正整数N,程序会输出符合题意的螺旋阵。这个程序使用了两层循环,第一层循环用来枚举起点,第二层循环用来枚举终点,然后将子串个数加1。最终程序会输出子串个数。 引用中的代码是一个排序程序,该程序使用了vector容器,通过输入一组整数并将其存储在vector中,然后使用sort函数对vector进行排序。最后,程序会输出排序后的整数序列。 根据你的问题描述"2023矿大数据结构",我无法理解你的问题,请提供更多的信息或者重新描述你的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [2023矿大数据结构实验二C++](https://blog.csdn.net/m0_72045533/article/details/131075157)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [2023矿大数据结构第三次作业代码](https://blog.csdn.net/m0_72045533/article/details/131485539)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值