第4周编程作业

1、恺撒加密(20分)
题目内容:

恺撒加密法加密规则是:将原来的小写字母用字母表中其后面的第3个字母的大写形式来替换,大写字母按同样规则用小写字母替换,对于字母表中最后的三个字母,可将字母表看成是首未衔接的。如字母c就用F来替换,字母y用B来替换,而字母Z用c代替。编程实现以下功能:输入一个字符串,将其加密后输出。

程序运行结果如下:
AMDxyzXYZ
dpgABCabc

输入格式:
一个字符串(不会超过20个字符,由26个英文字母构成)

输出格式:
一个字符串

输入样例:
AMDxyzXYZ

输出样例:
dpgABCabc

#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
/*	string str;
	cin >> str;
	int len = str.size();*/
	char str[30];
	cin >> str;
	int len = strlen(str);
	for (int i = 0; i < len; i++) {
		if (str[i] >= 'a'&&str[i] <= 'z') {
			if (str[i] < 'x')
				str[i] = str[i]-('a'-'A') + 3;
			else
				str[i] = str[i] % 'x' + 'A';
		}
		else{
			if(str[i] < 'X'){
				str[i]=str[i]+('a'-'A')+3;
			}
			else
				str[i]=str[i]%'X'+'a';
		}
	}
	for (int i = 0; i < len; i++) {
		cout << str[i];
	}
	return 0;
}

2、矩阵转置(20分)
题目内容:

用户输入矩阵阶数,然后按行输入所有矩阵元素(整数),将该矩阵转置输出。阶数应是[1,5]之间的整数,不在该区间时,显示“matrix order error”。

输入格式:
第1行,一个整数,表示阶数n。
以后是n行数据,每行n个整数,是按行输入的矩阵元素。

输出格式:
n行转置的数据,数据间以一个空格分隔,行末没有空格。

输入输出样例1
输入

4
4 6 8 9
2 7 4 5
3 8 16 15
1 5 7 11

输出:
4 2 3 1
6 7 8 5
8 4 16 7
9 5 15 11

输入输出样例2
输入:

0

输出:
matrix order error

注意:转置应该是存储矩阵的数组中的元素实现了转置运算,而不仅是显示效果。

#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
	int a[10][10];
	int w;
	cin >> w;
	if(w<=0||w>5){
		cout<<"matrix order error";
	}
	else{
	for (int i = 0; i < w; i++) {
		for (int j = 0; j < w; j++) {
			cin >> a[j][i];
		}
	}
	for (int i = 0; i < w; i++) {
		for (int j = 0; j < w; j++) {
			if (j == 0)
				cout << a[i][j];
			else
				cout << " " << a[i][j];
		}
		cout << endl;
	}		
	}
	return 0;
}

3、按点击率显示歌曲(20分)
题目内容:

连续录入5首歌的歌名、歌手和点击率清单并按照点击率由高到低的顺序显示歌曲清单的信息。如果点击率相同,则按照录入的顺序显示。
歌曲清单格式如下:
曲名 演唱者 点击率

输入格式:
5个歌曲的清单,其中曲名(不会超过50个字符)、演唱者为字符串(不会超过20个字符),点击率为整型数

输出格式:
5个歌曲的清单(曲名、演唱者,点击率之间用一个英文空格隔开,末尾没有空格)

输入样例:

匆匆那年 王菲 90
小苹果 筷子兄弟 100
当你老了 莫文蔚 80
最炫民族风 凤凰传奇 85
平凡之路 朴树 95

输出样例:

小苹果 筷子兄弟 100
平凡之路 朴树 95
匆匆那年 王菲 90
最炫民族风 凤凰传奇 85
当你老了 莫文蔚 80
#include<iostream>
struct Song
{
	char g[60];
	char y[30];
	int count;
}s[5],temp;
using namespace std;
int main()
{
	for (int i = 0; i < 5; i++) {
		cin >> s[i].g >> s[i].y >> s[i].count;
	}
	for (int i = 0; i < 5  ; i++) {
		for (int j = 0 ; j < 5 - 1 - i; j++) {
			if (s[j].count < s[j+1].count) {
				temp = s[j+1];
				s[j+1] = s[j];
				s[j] = temp;
			}
		}
	}
	for (int i = 0 ; i < 5 ; i++ ) {
		cout << s[i].g << " " << s[i].y<<" " << s[i].count << endl;
	}
	return 0;
}

4、星期转换(20分)
题目内容:

将用户输入的阿拉伯数字转换成对应星期几的英文单词(monday,tuesday,wednesday,thursday,friday,saturday,sunday)。输入1显示"monday",输入7显示“sunday”,如果用户输入的数字不在1~7之间,显示信息:invalid

输入格式:
整数

输出格式:
星期几的英文单词或者“invalid”

输入样例1:
1

输出样例1:
monday

输入样例2:
8

输出样例2:
invalid

#include<iostream>
using namespace std;
int main()
{
	int num;
	cin >> num;
	switch (num)
	{
	case 1:
		cout << "monday" << endl;
		break;
	case 2:
		cout << "tuesday" << endl;
		break;
	case 3:
		cout << "wednesday" << endl;
		break;
	case 4:
		cout << "thursday" << endl;
		break;
	case 5:
		cout << "friday" << endl;
		break;
	case 6:
		cout << "saturday" << endl;
		break;
	case 7:
		cout << "sunday" << endl;
		break;
	default:
		cout << "invalid" << endl;
		break;
	}
	return 0;
}

5、插入加密(20分)
题目内容:

插入式加密是在明文字母中按照指定间隔插入另一些字母以形成密文。例如对明文china,在间隔为1的位置插入其它字母序列中的字母a,b,c,d,e,就变成密文cahbicndae;间隔为2时的密文为chainbac,要求输入明文和间隔,从存放其它字母的序列(仅包含a,b,c,d,e)中依次取出对应字母插入到明文中,如果其它字母序列的字母取完,则从头再取,要求密文中最后一个字母一定是其它字母序列中的字母。

输入格式:
一个是明文字符串,一个是表示间隔的正整数。明文(不超过30个字符),间隔的取值范围是(1~5)。

输出格式:

密文(不超过60个字符)

输入样例:
china
1

输出样例:
cahbicndae

输入样例:
china
2

输出样例:
chainbac

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	char str[36];//存放明文的字符数组
	char ch[5] = { 'a','b','c','d','e' };//其它字母序列中的字母
	cin >> str;
	int num;//间隔
	cin >> num;
	int count = 0, index = 0;//count是计算间隔的 index是记录该输出哪个其它字母序列中的字母啦
	int len = strlen(str);//存放明文的字符数组的长度
	int len2 = strlen(ch);//其实是5 hhhh
	int temp = 0;//记录最后输出的是明文的字母(temp=0时)
	//还是其它字母序列中的字母(temp=1时)
	for (int i = 0; i < len; i++) {
		cout << str[i];
		temp = 0;
		count++;
		if (count == num) {
			count = 0;//清空
			cout << ch[index%len2];//%这样就不用清零啦 而且还可以定位到是哪个字母
			index++;
			temp = 1;
		}
	}
	if (temp == 0) {
		cout << ch[index%len2];
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值