中南大学数据规划考研上机题 – 哔哩哔哩(中南大学数据科学与大数据)

3 minutes, 17 seconds Read


第一题:水仙花数

/**
?* 春天是鲜花的时节,水仙花就是其间最诱人的代表,数学上有个水仙花数,它是这样界说的:

?苫ㄊ笔侵敢桓鋈皇母魑皇值牧⒎胶偷扔谄浔旧恚确?153=13+53+33

如今需求输出一切在 m和 n
?规模内的水仙花数。

输入格局
输入包括多组查验数据。

每组数据占一行,包括两个整数 m
?和 n

最终一行 0 0 标明输入结束。

输出格局
每组数据输出一行答案,从小到大输出一切位于 [m,n]
?规模内的水仙花数,数之间用空格离隔,假定没有则输出 no。

数据规模
100≤m≤n≤999
,
输入最多包括 10组数据。
?输入样例:
100 120?
300 380?
0 0
输出样例:
no
370 371**/
#include<bits/stdc++.h>
using namespace std;
int three(int x)
{
? ? int c=0;
? ? while(x!=0){
? ? ? ? c=c+(x%10)*(x%10)*(x%10);
? ? ? ? x/=10;
? ? }
? ? return c;
}
int main()
{
? ? int m,n;
? ? cin >> m >> n;
? ? bool ok =? false;
? ? for(int i = m; i<=n;i ++){
? ? ? ? if(i == three(i)){
? ? ? ? ? ? ok = true;
? ? ? ? ? ? cout << i <<
? ? ? ? }
? ? }
? ? if(!ok) cout <<
? ? return 0;
}
第二题:平方和与立方和
/**
给定一段接连的整数,求出它们中一切偶数的平方和以及一切奇数的立方和。

输入格局
输入包括多组查验数据。

每组数据占一行,包括两个整数 n,m
。标明接连整数为 min(n,m)~max(n,m)

输出格局
每组数据输出一行成果,包括两个整数 x
?和 y
,(两个数之间用一个空格离隔)别离标明该段接连的整数中一切偶数的平方和以及一切奇数的立方和。

数据规模
1≤n,m≤1000
,n≠m
,
答案保证不跨越 231?1

输入最多包括 100
?组数据。

输入样例:
1 3
2 5
输出样例:
4 28
20 152
**/

#include <bits/stdc++.h>

using namespace std;

int main(){

int m,n;
while(cin >>m && cin >> n){
? ? int ans1=0;
? ? int ans2=0;
for(int i = min(m,n);i <= max(m,n);i++){
if(i%2 == 0) ans1 += i*i;
else ans2 += i*i*i;
}
cout << ans1 <<
}
return 0;
}
第三题:成果的等级
/**
?给出一百分制成果,需求输出成果等级 a、b、c、d、e。

90
?分以上为 a
,80~89
?分为 b
,70~79
?分为 c
,60~69
?分为 d
,60
?分以下为 e

输入格局
一个整数 score

输出格局
一个字符,标明成果等级。

数据规模
0≤score≤100
输入样例:
90
输出样例:
a
**/
#include <bits/stdc++.h>
using namespace std;

int main(){
int n;
while(cin >> n){
if(n >= 90 && n <= 100) cout <<
if(n >= 80 && n < 90) cout <<
if(n >= 70 && n < 80) cout <<
if(n >= 60 && n < 70) cout <<
if( n < 60) cout <<
}

return 0;
}
第四题:最少钱币数
/**
作为 a 公司的职工,最期望的日子就是每月的 8号了,因为这一天是发薪酬的日子,养家糊口就靠它了。

可是关于公司财务处的作业人员来说,这一天则是很繁忙的一天,财务处的小胡迩来就在思考一个疑问:

假定每个职工的薪酬额都晓得,最少需要预备多少张公民币,才干在给每位职工发薪酬的时分都不必教师找零呢?

这儿假定职工的薪酬都是正整数,单位元,公民币一共有 100元、50元、10元、5元、2元和 1元六种。

输入格局
输入包括多组查验数据。

每组数据第一行包括整数 n,标明职工数量。

第二行包括 n个整数,标明每个职工的应发薪酬。

输出格局
每组数据输出一行成果,标明最少需要预备的人名币张数。

数据规模
1≤n≤100,
薪酬规模 [1,5000],
输入最多包括 100组数据。

输入样例:
3
1 2 3
2
1 2
输出样例:
4
2
**/
#include <bits/stdc++.h>

using namespace std;

int money[7] = {0,100,50,10,5,2,1};

int main(int argc, char const *argv[])
{
int n;
while(cin >> n){
int ans = 0;
for(int i = 0; i < n;i++){
int c;
cin >> c;
for(int j = 1; j < 7; j ++){
if(c == 0) break;
ans += c / money[j];
c = c % money[j];
}
}
cout<< ans << endl;
}
return 0;
}
第五题:平安密码
/**
?网络上各类生意活动越来越广泛,为了可以安安心心肠上网,常常需要设置一个平安的密码。

一般来说一个比照平安的密码至少大约满足下面两个条件:

密码长度大于等于 8

密码中的字符大约来自下面“字符品种”中四组中的至少三组。
这四个字符品种别离为:

大写字母:a,b,c…z;
小写字母:a,b,c…z;
数字:0,1,2…9;
特别符号:~,!,@,#,$,%,^;
给你一个密码,你的使命就是判别它是不是一个平安的密码。

输入格局
输入包括多组查验数据。

每组数据占一行,包括一个字符串标明密码。

输出格局
每组数据输出一行成果,假定是平安密码则输出 yes,否则输出 no。

数据规模
输入字符串长度不跨越50且仅包括标题所述四类字符。
输入最多包括 100组数据。

输入样例:
a1b2c3d4
linle@acm
^~^@^@!%
输出样例:
no
yes
no
**/
#include <bits/stdc++.h>
using namespace std;

bool solve(string s){
? ? int a[3];//符号数组用于符号每种字符是不是存在当数组中非零元素大于3时满足条件
? ? for(int i = 0; i < 4; i++) a[i] = 0;//初始化数组
? ? bool len = false;
? ? int n = s.size();
? ? if(s.size() >= 8) len = true;
? ? char other[] = {
? ? for(int i = 0; i < n &&am

p; len;i++){
? ? ? ? if(s[i] >=
? ? ? ? if(s[i] >=
? ? ? ? if(s[i] >=
? ? ? ? else{
? ? ? ? ? ? for(int j = 0; j < 7;j ++){
? ? ? ? ? ? ? ? if(other[j] == s[i]) a[3] ++;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? int flag = 0;
? ? for(int i = 0; i < 4;i ++){
? ? ? ? if(a[i] > 0) flag ++;
? ? }
? ? if(flag >= 3 && len) return true;
? ? else return false;
}

int main(){
? ? string a;
? ? while(cin >> a){
? ? ? ? if(solve(a)) cout <<
? ? ? ? else cout <<
? ? }
? ? return 0;
}
第六题:惠民工程
/**
?市政府“惠民工程”的方针是在全市 n个居民点间之架起煤气管道(但不必定有直接的管道相连,只需能直接经过管道可达即可)。

很显着最多可架起 n(n?1)/2条管道,可是实践上要连通 n个居民点只需架起 n?1条管道就可以了。

现请你编写程序,核算出该惠民工程需要的最低本钱。

输入格局
输入包括多组查验数据。

每组数据第一行包括两个整数 n和 m,标明居民点数量和评价管道数量。

接下来 m行,每行包括三个整数 a,b,c,标明居民点 a和 b之间架起管道需要 c的本钱。居民点编号 1~n。

输出格局
每组数据输出一行一个成果,标明全市管道疏通所需要的最低本钱。

若计算数据缺乏以保证疏通,则输出 ?。

数据规模
2≤n≤100
,
1≤m≤n(n?1)2
,
1≤a,b≤n
,
1≤c≤100
,
每个输入最多包括 100
?组数据。

输入样例:
3 3
1 2 1
1 3 2
2 3 4
3 1
2 3 2
输出样例:
3
?
难度:简略
时/空捆绑:1s / 64mb
总经过数:177
总测验数:314
来历:中南大学考研机试题
算法标签
**/

//分析:该题归于图的最小生成树疑问,可以运用kruskal算法,而且当边的数量小于n-1时,必定不能抵达悉数连通
#include <bits/stdc++.h>
using namespace std;
struct edge
{
int u, v;
int weight;
};
vector<int> father; //记载每个节点的父亲
vector<int> result; //存储最终获得的各条边

bool compare(edge a, edge b)
{
return a.weight < b.weight;
}

int findfather(int a)
{
while (a != father[a])
{
a = father[a];
}
return a;
}
void kruskal(int n, vector<edge> edge)
{
father.resize(n);
sort(edge.begin(), edge.end(), compare);
for (int i = 0; i < n; ++i)
{
father[i] = i;
}
for (int i = 0; i < edge.size() && result.size() < n-1; ++i)
{
int u = edge[i].u;
int v = edge[i].v;
if (findfather(u) != findfather(v)) //判别父节点是不是相同
{
result.push_back(edge[i].weight);
father[findfather(u)] = father[findfather(v)]; //将两点并入一个集结中
}
}
}

int main()
{
int n, m;
while(cin >> n && cin >> m){
vector<edge> edge(m);
for (int i = 0; i < m; ++i)
{
cin >> edge[i].u >> edge[i].v >> edge[i].weight;
}
kruskal(n,edge);
if(result.size() < n-1){
? ? cout <<
}
else{
? ? int ans = 0;
? ? for(int i = 0; i < result.size(); i ++){
? ? ? ? ans += result[i];
? ? }
? ? cout << ans << endl;
}
}
return 0;
}
全体来说六题都比照简略,比照有保藏价值的标题为第六题,惠民工程首要讲的是最少生成树的规划办法,在试卷中咱们大多遇到的都是prim算法,而这题选用的是kruskal算法,一起结兼并查集,是一个很不错的保藏模板。

Similar Posts

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

|京ICP备2022015867号-3