恁开大一c++期末作业

今日话题:你的c++期末作业怎么救急 doge(

  作者是个菜鸟,欢迎读者指正赐教

##高级语言程序设计2-1 作业##

A。字符串旋转

     大致思路:1.分成左和右两种情况;2.分成旋转部分和移动部分(记得旋转长度要对总长度取模)3.输出

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

struct st { 
	string s; 
	char a; 
	int n; 
}; 
int main(void) {
	int N;
    cin >> N; 
	st str[20]; 

	for (int i = 0; i < N; i++) { 
		cin >> str[i].s >> str[i].a >> str[i].n; 
		str[i].n%= str[i].s.size(); 
	} 
	for (int i = 0; i < N; i++) { 
		if (str[i].a == 'L') { 
			string temp0 = "";//spin
			string temp1 = "";//move
			int a = str[i].n; 
			int len = str[i].s.size(); 

			for (int j = 0; j < str[i].n; j++) { 
				temp0 += str[i].s[j];
			} 
			for (int k = a; k < len; k++) {
				 temp1 += str[i].s[k]; 
			} 

			str[i].s = temp1 + temp0; 
		 }
		else if (str[i].a == 'R') { 
			string temp0 = "";//spin
			string temp1 = "";//move
			int a = str[i].n; 
			int len = str[i].s.size();
			for (int j = len - str[i].n; j < len; j++) {
				temp0 += str[i].s[j]; 
			} 
			for (int k = 0; k < len - str[i].n; k++) {
				temp1 += str[i].s[k];
			}

			str[i].s = temp0 + temp1; 
		} 
	for (int j = 0; j<str[i].s.size(); j+=2) {
			cout << str[i].s[j]; } cout<< endl; 
	} 
        return 0; 
}

 B。学生结构体

       大致思路:对学号的比大小也是一种排序

        1.结构体定义

        2.冒泡排序

         3.不要忘了“error”情况

#include<iostream> 
using namespace std;
struct student {
	int ID;
	char name[50];
	double grade[4];//输入123可以直接访问
};

void sort114514(int type, int size,student sum[]) {
	for (int i = 0; i < size - 1; ++i) {
		for (int j = i+1; j < size; ++j) {
			if (sum[j].grade[type] > sum[i].grade[type]) {
				student temp = sum[j];
				sum[j] = sum[i];
				sum[i] = temp;
			}
			else if (sum[j].grade[type] == sum[i].grade[type]) {
				if (sum[i].ID > sum[j].ID) {
					student temp = sum[j]; 
					sum[j] = sum[i]; 
					sum[i] = temp; 
				}
			}
		}
	}
}

int main() {
	int n;
	cin >> n;
	student sum[100];
	for (int i = 0; i < n; ++i) {
		cin>>sum[i].ID>>sum[i].name>>sum[i].grade[1]>>sum[i].grade[2]>>sum[i].grade[3];
	}
	
	int type;
	cin >> type;
	if ( type != 1 &&type != 2&&type != 3) {
		cout << "ERROR";
		return 0;
	}
	sort114514(type, n, sum);
	for (int i = 0; i < n; ++i) {
		cout << sum[i].ID <<" " << sum[i].name << endl;
	}
	
	return 0;
}

C。数组合并

    大致思路:这里图个简便,使用了红黑树的特性快速解决。

#include<iostream>
#include<set>
using namespace std;
int main() {
	set<int>MYset;
	int n,m;
	cin >> n >> m; 
	for (int i = 0; i < n + m; ++i) {
		int temp;
		cin >> temp;
		MYset.insert(temp);
	}
	for (auto it = MYset.begin(); it != MYset.end(); ++it) {
		cout << *it << " ";
	}
	return 0;
}

D。矩阵运算

    大致思路:一个是根据行数确定输出方向

                      一个是蛇形输出  ,这里使用circle来记录圈数,并将访问过的元素赋值为零来记录是否访问过该元素,在编程时要注意结束循环后需要更新行数和列数。

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

int main(void) {
	int n, m;
	cin >> n >> m;
	int** N = new int* [n];
	for (int i = 0; i < n; ++i) {
		N[i] = new int[m];
	}
	for (int i = 0; i < n; ++i){
		for (int j = 0; j < m; ++j){
			cin >>N[i][j];
		}
	}
	for (int i = 0; i < n; ++i) {
		if (i % 2==1) {
			 for(int j = m - 1; j > -1; --j) {     
				cout << N[i][j] << ' ';
			 }
		}
		else {
			for (int j = 0; j < m; ++j) {
				cout << N[i][j] << ' ';
			}
		}
	}
	cout << endl;

	int circle = 0;
	int row = 0, column = 0;
	for (int i = 0; i < m * n;) {
		switch (circle%4) {
		case 0:
			for (;column< m && N[row][column] != 0; column++) {
				cout << N[row][column] << " ";
				N[row][column] = 0;
				++i;
			}
			row++;
			column--;//更新
			break;
		case 1:
			for (; row<n && N[row][column] != 0; ++row) {
				cout << N[row][column] << " ";
				N[row][column] = 0;
				++i;
			}
			row--;
			column--;//更新
			break;
		case 2:
			for (; column >-1 && N[row][column] != 0;--column) {
				cout << N[row][column] << " ";
				N[row][column] = 0;
				++i;
			}
			row--;
			column++;//更新
			break;
		case 3:
			for (; row > -1 && N[row][column] != 0;--row) {
				cout << N[row][column] << " ";
				N[row][column] = 0;
				++i;
			}
			row++;
			column++;//更新
			break;
		}
		++circle;
	}

	return 0;
}

E。距离最近的素数

        大致思路:做一个判断素数的函数

                       左边很特殊,不要忘了不能为负数。

#include<iostream>
#include<vector>
using namespace std;
bool is_prime(int n) {
	if (n == 2)return true;
	if (n == 1 || n == 0)return 0;
	for (int i = 2; i < n; ++i) {
		if (n % i == 0)return false;
	}
	return true;
}
int main() {
	int n;
	cin >> n;
	if (n > 0 && n <= 10000) {
		int* k = new int[n];

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

		for (int j = 0; j < n; ++j) {
			if (0 < k[j] && k[j] < 1000000) {
				int lnum = -1, ldis = -1;
				for (int i = k[j]; i > 1; i--) {
					if (is_prime(i)) {
						lnum = i;
						ldis = k[j] - i;
						break;
					}
				}
				int rnum = 0, rdis = 0;
				for (int i = k[j];; i++) {
					if (is_prime(i)) {
						rnum = i;
						rdis = i - k[j];
						break;
					}
				}
				if (ldis <= rdis && ldis > 0) {
					cout << lnum << " " << ldis << endl;
				}
				else {
					cout << rnum << " " << rdis << endl;
				}
			}

			else {
				cout << "INCORRECT INPUT!" << endl;
			}
		}
		delete[]k;
	}
	else {
		cout << "INCORRECT INPUT!" << endl;
	}
	return 0;
}

F。重载函数

      大致思路:能跑就行,我写的很臃肿

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
void OddFliter(int a[], int size) {
	vector<int>odd;
	for (int i = 0; i < size; ++i) {
		if ((a[i] % 2) == 1)odd.push_back(a[i]);
	}
	if (odd.size() == 0) {
		cout << "No Odd!\n";
		return;
	}
	 sort(odd.begin(), odd.end());
	 for (int i = 0; i < odd.size(); ++i) {
		 cout << odd[i] << " ";
	 }
	 cout << endl;
}
void OddFliter(double a[], int size) {
	vector<long long> odd;
	for (int i = 0; i < size; ++i) {
		long long s = round(a[i]);
		if (s % 2)odd.push_back(s);
	}
	if (odd.size() == 0) {
		cout << "No Odd!\n";
		return;
	}
	sort(odd.begin(), odd.end());
	for (int i = 0; i < odd.size(); ++i) {
		cout << odd[i] << " ";
	}
	cout << endl;

}
void OddFliter(char a[], int size) {
	int odd[128] = {};
	for (int i = 0; i < size; ++i)odd[a[i]]++;
    int temp=0;
	for (int i = 0; i < 128; ++i) {
		
		if (odd[i] % 2) {
			cout << (char)i << " ";
			++temp;
		}
	}
	if (temp == 0) {
		cout << "No Odd!\n";
		return;
	}
	cout << endl;
}
int main() {
	int n, m;
	cin >> n >> m;
	int* N = new int[n];
	double* M = new double[m];
	char Q[1000]; 

	for (int i = 0; i < n; ++i)cin >> N[i];
	for (int i = 0; i < m; ++i)cin >> M[i];
	cin >> Q;

	OddFliter(N, n);
	OddFliter(M, m);
	OddFliter(Q, strlen(Q));

	delete[]N;
	delete[]M;
	return 0;
}
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值