2023矿大数据结构实验一C++

2023矿大数据结构实验一C++


目录:

1.题目A

2.题目B

3.题目C

4.题目D

5.题目E

6.题目F

代码仅供参考!!!


题目A

题目描述

        新年快到了,天勤准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来。

输入

        第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数N(1<n<32768),表示会员人数。

输出

        对于每一个N,输出一行新朋友的人数,这样共有CN行输出。

代码如下:

#include<iostream>
using namespace std;
int people(int n)
{
	int i, j, k = 1;
	int m = n;
	for (i = 2; i <= m; i++)
	{
		if (m % i == 0)
		{
			k *= (i - 1);
			while (m % i == 0)
			{
				m /= i;
				k *= i;
			}
			k /= i;
		}
	}
	return k;
}
int main()
{
	int m, n, i;
	cin >> n;
	i = n;
	int* p = new int[n];
	while ((n--) != 0)
	{
		cin >> m;
		*p = people(m);
		p++;
	}
	p = p - i;
	while ((i--) != 0)
	{
		cout << *p << endl;
		p++;
	}
	return 0;
}

运行结果:

 

 

题目B

题目描述

        给你一个正整数n,请问有多少个比n小的且与n互质的正整数?
        两个整数互质的意思是,这两个整数没有比1大的公约数。

输入

        输入包含多组测试数据。每组输入是一个正整数n(n<=1000000000)。当n=0时,输入结束。

输出

        对于每组输入,输出比n小的且与n互质的正整数个数。

代码如下:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int N, n, i;
	int* p=new int[10];
	i = 0;
	while (scanf_s("%d", &N) != EOF)
	{
		i++;
		if (N == 0)
			break;
		n = N;
		for (int i = 2; i <= sqrt(N); i++)
			if (N % i == 0)
			{
				n = n / i * (i - 1);
				while (N % i == 0)
					N /= i;
			}
		if (N > 1)
		{
			n = n / N * (N - 1);
			*p = n;
			p++;
		}
	}
	p = p - i + 1;
	for (int j = 0; j < i - 1; j++)
	{
		cout << *p<<endl;
		p++;
	}
	return 0;
}

运行结果:

 

题目C

题目描述

        n个人围成一圈,按1到n的顺序编号。从第一个人开始报数(从1到m报数),凡报到m的人退出圈子,问最后留下的是原来的第几号。

输入

        首先输入两个正整数n和m,n表示n个人围一个圈子(n>=2),m表示从1报数到m的人退出圈子(1=<m)。

输出

        最后剩下的人的编号。

代码如下:

#include <iostream>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    int *a=new int[n];
    for (int i = 0; i < n; i++) {
        *(a+i) = i + 1;
    }
    int p = 0;
    while (true) {
        int count = 0;
        while (count < m) {
            if (*(a + p) != 0) {
                count++;
            }
            if (count == m) {
                break;
            }
            p++;
            if (p == n) {
                p = 0;
            }
        }
        *(a + p) = 0;
        int remain = 0;
        for (int i = 0; i < n; i++) {
            if (*(a + i) != 0) {
                remain++;
            }
        }
        if (remain == 1) {
            break;
        }
        p++;
        if (p == n) {
            p = 0;
        }
    }
    for (int i = 0; i < n; i++) {
        if (*(a + i) != 0) {
            cout << *(a + i) << endl;
            break;
        }
    }
    return 0;
}

运行结果:

 

题目D

题目描述

        编写程序演示把一个10进制整数转换为R进制的转换结果。

输入

        正整数N和R,空格分隔
N是输入的十进制数,R需要转换的进制数,2<=R<=20

输出

        将10进制整数转换为R进制的转换结果,超过9的数字符号显示为A、B、C……Z等字母。

代码如下:

#include <iostream>
using namespace std;
int main() {
    int n, r;
    cin >> n >> r;
    char a[36];
    int i = 0;
    while (n >= r) {
        int remainder = n % r;
        if (remainder >= 10) {
            a[i] = 'A' + remainder - 10;
        }
        else {
            a[i] = '0' + remainder;
        }
        i++;
        n /= r;
    }
    if (n >= 10) {
        a[i] = 'A' + n - 10;
    }
    else {
        a[i] = '0' + n;
    }
    for (int j = i; j >= 0; j--) {
        cout << a[j];
    }
    cout << endl;
    return 0;
}

运行结果:

 

题目E

题目描述

        输入两个整数的求和式,比如1+2=,输出求和式和对应结果。请编程实现。

输入

        一个求和式,形如a+b=。

输出

        求和式及对应结果。

代码如下:

#include <iostream>
#include <sstream>
using namespace std;
int main() {
    string input;
    cin >> input;
    int a, b, sum;
    char op;
    stringstream ss(input);
    ss >> a >> op >> b;
    sum = a + b;
    cout << input << sum << endl;
    return 0;
}

运行结果:

题目F

题目描述

        波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的波兰表示法为+ 2 3。波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的波兰表示法为* + 2 3 4。本题求解波兰表达式的值,其中运算符包括+ - * /四个。

输入

        输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。

输出

        输出为一行,表达式的值(保留6位小数)。

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
double solve();
int main()
{
    double c;
    c=solve();
    printf("%.6f", c);
    return 0;
}
double solve()
{
    char a[10];
    cin >> a;
    switch (a[0]) {
    case '+':return solve() + solve();
    case '-':return solve() - solve();
    case '*':return solve() * solve();
    case '/':return solve() / solve();
    default:return atof(a);
    }
}

运行结果:

 

 题目G

题目描述

        上体育课的时候,老师已经把班级同学排成了两个队列,而且每个队列都是按照从底到高排好队,现在需要把两个队列合并,合并后需要保证还是从低到高排列。合并队列,你能编程实现吗?

输入

        第1行为n,表示开始排成的每个队列的长度。第2、3行是代表从小到大的n个整数,每行的整数间有一个空格间隔。

输出

        输出占一行,为从小到大的整数,每个整数间间隔一个空格。

代码如下:

#include <iostream>
#include <vector>
using namespace std;
vector<int> merge(vector<int>& v1, vector<int>& v2) {
    vector<int> res;
    int i = 0, j = 0;
    while (i < v1.size() && j < v2.size()) {
        if (v1[i] < v2[j]) {
            res.push_back(v1[i]);
            i++;
        }
        else {
            res.push_back(v2[j]);
            j++;
        }
    }
    while (i < v1.size()) {
        res.push_back(v1[i]);
        i++;
    }
    while (j < v2.size()) {
        res.push_back(v2[j]);
        j++;
    }
    return res;
}
int main() {
    int n;
    cin >> n;
    vector<int> v1(n), v2(n);
    for (int i = 0; i < n; i++) {
        cin >> v1[i];
    }
    for (int i = 0; i < n; i++) {
        cin >> v2[i];
    }
    vector<int> res = merge(v1, v2);
    for (int i = 0; i < res.size(); i++) {
        cout << res[i] << " ";
    }
    cout << endl;
    return 0;
}

运行结果:

 

  • 14
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
引用中的代码是一个用来构建螺旋阵的程序,通过输入一个正整数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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值