第4周编程作业(aicbhwuifhu)

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

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

程序运行结果如下:

AMDxyzXYZ

dpgABCabc

输入格式:

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

输出格式:

一个字符串

输入样例:

AMDxyzXYZ

输出样例:

dpgABCabc

//恺撒加密
#include<iostream>
using namespace std;
void caesar_encrypt(char s[]);
int main()
{
	char s[21];
	cin.getline(s, 20);
	caesar_encrypt(s);
	cout << s << endl;
	return 0;
}
void caesar_encrypt(char s[])
{
	int i = 0;
	while (s[i] != '\0')
	{
		if (s[i] >= 'a' && s[i] <= 'z')
		{
			if (s[i] >= 'x')
				s[i] = s[i] - ('a' - 'A') + 3 - 26;
			else
				s[i] = s[i] - ('a' - 'A') + 3;
		}
		else if (s[i] >= 'A' && s[i] <= 'Z')
		{
			if (s[i] >= 'X')
				s[i] = s[i] - 'A' + 'a' - 26 + 3;
			else
				s[i] = (s[i] - 'A' + 3) % 26 + 'a';
		}
		i++;
	}
}

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>
using namespace std;
void zhuanzhi(int a[][6],int n);
int main()
{
	int n;
	cin >> n;
	if (n < 1 || n>5)
	{
		cout << "matrix order error" << endl;
		return -1;
	}
	int a[6][6];
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			cin >> a[i][j];
	zhuanzhi(a, n);
	int i,j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n - 1; j++)
			cout << a[i][j] << " ";
		cout << a[i][j] << endl;
	}
	return 0;
}
void zhuanzhi(int a[][6], int n)
{
	int i, j;
	for (i = 0; i < n; i++)
	{
		for ( j = 0; j < i; j++)
		{
			int temp;
			temp = a[i][j];
			a[i][j] = a[j][i];
			a[j][i] = temp;
		}
	}
	
}

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

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

歌曲清单格式如下:

曲名 演唱者 点击率

输入格式:

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

输出格式:

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

输入样例:

匆匆那年 王菲 90

小苹果 筷子兄弟 100

当你老了 莫文蔚 80

最炫民族风 凤凰传奇 85

平凡之路 朴树 95

输出样例:

小苹果 筷子兄弟 100

平凡之路 朴树 95

匆匆那年 王菲 90

最炫民族风 凤凰传奇 85

当你老了 莫文蔚 80

#include<iostream>
#include<string>
using namespace std;
struct List {
	char song[200];
	char singer[200];
	int freq;
}s[5];
int main()
{
	int i, j, temp;
	for (i = 0; i < 5; i++)
	{
		cin >> s[i].song >> s[i].singer >> s[i].freq;
	}
	for(i=0;i<4;i++)
		for (j = 0; j < 5 - i; j++)
		{
			if (s[j].freq < s[j + 1].freq)
			{
				temp = s[j].freq;
				s[j].freq = s[j + 1].freq;
				s[j + 1].freq = temp;
			}
		}
	for (i = 0; i < 5; i++)
	{
		cout << s[i].song << " " << s[i].singer << " " << s[i].freq << endl;
	}
}


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>
#include<string>
using namespace std;
int main()
{
	int n;
	string a[8]= { "sunday","monday","tuesday","wednesday","thursday","friday","saturday" };
	cin >> n;
	if (n < 1 || n>7)
	{
		cout << "invalid";
		return -1;
	}
	cout << a[n];
	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

//插入加密
#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s[5] = { "a","b","c","d","e" };
	string a;
	int k;
	cin >> a >> k;
	int len = a.length();
	int p;
	if (len % k == 0)
		p = len / k;
	else
		p = len / k + 1;
	int cnt = 0;
	int now = k;
	while (cnt < p) {
		if (now <= len) {
			a.insert(now, s[cnt % 5]);
			now += (k + 1);
			cnt++;
			len++;
		}
		else {
			a += s[cnt % 5];
			len++;
			cnt++;
		}
	}
	cout << a << endl;
	return 0;

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值