第二周练习

第二周练习
A. 阶乘之和
B. 数组逆序存放
C. 密码的破译
D. 矩阵转置
E. 论文查重函数

A 阶乘之和
难度系数:★★☆☆☆
描述: 用高精度计算出 S=1!+2!+3!+…+n!(n≤50)。其中“!”表示阶乘
输入 : 一个正整数 N。
输出 : 计算结果 S。
运行环境:VC++6.0
代码

#include<stdio.h>
int main()
{
	int n,s=0,i,t=1;
	scanf("%d",&n);
	if(n>50)	//n要小于等于50
		printf("Please enter a number less than 50.\n");
	else
	{
		for(i=1;i<=n;i++){	//阶乘后相加
			t=t*i;
			s=s+t;
		}
		printf("%d\n",s);
	}
	return 0;
}

在这里插入图片描述

B. 数组逆序存放
难度系数:★★★☆☆
描述: 将一个数组中的值按逆序重新存放。例如,原来的顺序为 8,6,5,4,1。要求改为
1,4,5,6,8。
输入:输入为两行:第一行数组中元素的个数 n(1<n<100),第二行是 n 个整数,每两
个整数之间用空格分隔。
输出 : 输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。
运行环境:VC++6.0
代码

#include<stdio.h>
int main()
{
	int n,a[100]={0},i,t;
	scanf("%d",&n);
	if(n<=1||n>=100)	//n是一个1-100的数
		printf("请输入一个1-100的数\n");
	else{
		for(i=0;i<n;i++)
			scanf("%d",&a[i]);	//将接收到的数字存到数组中
		for(i=0;i<n/2;i++){		//将数组中的元素逆序
			t=a[i];
			a[i]=a[n-i-1];
			a[n-i-1]=t;
		}
		for(i=0;i<n;i++){		//将数组中的元素顺序输出
			printf("%d",a[i]);
			printf(" ");
		}
		printf("\n");
	}
	return 0;
}

在这里插入图片描述
C 密码的破译
难度系数:★★★☆☆
描述:小明是一个密码学专家,在一次信息战中,他截获了敌方的一份情报。情报的内容是
J Mpwf Tuvez,J Mjlf Dpef. Qmfatf Qvu Zpvs Cftu Gppu Gpsxase !
现在已知:对给定的一个字符串,把其中从 a-y,A-Y 的字母用其前驱字母替代,把 z 和 Z 用
a 和 A 替代。其他非字母字符维持原状。则可破译敌方情报。
输入 :
输入一行,包含一个字符串,长度小于 100 个字符。
输出
输出每行字符串的加密字符串。
样例输入
J Mpwf Mfbsojoh,J Mjlf Dpef. Qmfbtf Qvu Zpvs Cftu Gppu Gpsxbse!
样例输出

运行环境:VC++6.0
代码

#include<stdio.h>
int main()
{
	char c;
	while((c=getchar())!='\n')	//	接收字符串,直到输入回车终止
		if(c>='A'&&c<='Y'||c>='a'&&c<='y')	//判断字符范围,变换后输出
			printf("%c",c-1);
		else if(c=='z'||c=='Z')
			printf("%c",c-25);
		else
			printf("%c",c);
		printf("\n");
		return 0;
} 

在这里插入图片描述

D 矩阵的转置
难度系数:★★★☆☆
描述
输入一个 n 行 m 列的矩阵 A,输出它的转置 A T 。
输入
第一行包含两个整数 n 和 m,表示矩阵 A 的行数和列数。1 <= n <= 100,1
<= m <= 100。
接下来 n 行,每行 m 个整数,表示矩阵 A 的元素。相邻两个整数之间用单个空格
隔开,每个元素均在 1~1000 之间。
输出
m 行,每行 n 个整数,为矩阵 A 的转置。相邻两个整数之间用单个空格隔开。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7
2 5 8
3 6 9
运行环境:VC++6.0
代码

#include<stdio.h>
int main()
{
	int a[100][100],b[100][100],n,m,i,j;
	scanf("%d %d",&n,&m);
	if(n>=1&&n<=100&&m>=1&&m<=100){	//判断n,m是否是1-100之间的数
		for(i=0;i<n;i++)
			for(j=0;j<m;j++)
				scanf("%d",&a[i][j]);	//将输入的数据存放到矩阵a中
			printf("\n");

			for(j=0;j<m;j++){	//转置矩阵a中的元素,将数存放到矩阵b中
				for(i=0;i<n;i++){
					b[j][i]=a[i][j];
					printf("%d",b[j][i]);	//输出矩阵b中的元素
					printf(" ");
				}
				printf("\n");
			}
			
	}
	else
		printf("两个整数均为1-100之间的数\n");
		return 0;
}

在这里插入图片描述

缺点:不能让每个元素均在 1~1000 之间

E 论文查重 函数
难度系数:★★★★☆
描述: “聪明”的小白菜马上就要毕业了,目前面临着棘手的论文问题。小白菜想知道自己
的论文与已知论文内容的重合率,若重合率不大于 20%,则大吉大利;否则,小白菜需要修
改论文。
已知论文内容 :
1 2 3 4
8 0 2 3
5 0 9 7
6 0 5 7
小明的论文:
1 3 2 4
8 0 9 3
1 0 6 8
6 5 0 5
输入 :
第一行包含一个整数 n,表示论文的行列数。1 <= n <= 100。 之后 n 行,输入小明的论
文内容,每行 n 个整数,相邻两个数之间用单个空格隔开。
输出 :论文内容的重合率。
运行环境:VC++6.0
代码

#include<stdio.h>
int main()
{
	int a[4][4]={{1,2,3,4},{8,0,2,3},{5,0,9,7},{6,0,5,7}},b[100][100];
	int n,i,j,s=0;
	float chl;
	scanf("%d",&n);		//输入行列数
	if(n>100||n<1)		//让n为1-100之间的数
		printf("请输入一个1-100的数\n");
	else{
		for(i=0;i<n;i++)
			for(j=0;j<n;j++)
				scanf("%d",&b[i][j]);	//输入论文内容,存入数组b
			
			for(i=0;i<4;i++)	//查看有多少相同的元素,如果相同,s+1
				for(j=0;j<4;j++)
					if(a[i][j]==b[i][j])
						s++;
					chl=(float)s/(n*n)*100;		//计算重合率
					printf("%.2f%%\n",chl);}		//输出重合率,保留两位小数
	return 0;
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值