2020秋季C语言练习题(8)

这是一个包含多个编程问题的集合,分别涉及编码转换、回文质数检测和数字矩阵求和。第一个程序将输入的字符串根据特定编码规则转换并验证编码的正确性;第二个程序寻找指定范围内的回文质数;第三个程序计算并输出矩阵的行和列之和。
摘要由CSDN通过智能技术生成

在这里插入图片描述

#include<stdio.h>
int main()
{
	int T=0,i=0,j=0,k=0,sum[100]={},ans[100]={},end=0;
	char x[100][18];
	scanf("%d",&T);
	for(i=0;i<T;i++){
		scanf("%s",x[i]);
	}
	for(i=0;i<T;i++){
		
		sum[i]=(int)((x[i][0]-48)*7+(x[i][1]-48)*9+(x[i][2]-48)*10+(x[i][3]-48)*5+(x[i][4]-48)*8+(x[i][5]-48)*4
			+(x[i][6]-48)*2+(x[i][7]-48)*1+(x[i][8]-48)*6+(x[i][9]-48)*3+(x[i][10]-48)*7+(x[i][11]-48)*9+(x[i][12]-48)*10
			+(x[i][13]-48)*5+(x[i][14]-48)*8+(x[i][15]-48)*4+(x[i][16]-48)*2);
		ans[i]=sum[i]%11;
	switch(ans[i]){
			case 0:if(x[i][17]=='1')k=1;break;
			case 1:if(x[i][17]=='0')k=1;break;
			case 2:if(x[i][17]=='X')k=1;break;
			case 3:if(x[i][17]=='9')k=1;break;
			case 4:if(x[i][17]=='8')k=1;break;
			case 5:if(x[i][17]=='7')k=1;break;
			case 6:if(x[i][17]=='6')k=1;break;
			case 7:if(x[i][17]=='5')k=1;break;
			case 8:if(x[i][17]=='4')k=1;break;
			case 9:if(x[i][17]=='3')k=1;break;
			case 10:if(x[i][17]=='2')k=1;break;
		}
		if(k==1){
			printf("right\n");
		}
		else{
			printf("wrong\n");
		}
		k=0;
	}
	return 0;
}

B. 回文质数
运行时间限制: 1000 运行内存限制: 65536
作者: scsyuanbaoku 是否specialjudge: False
题目描述
因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以151是回文质数。请写一个程序来找出范围[a,b] (5≤a≤b≤100000)间的所有回文质数。
输入:只有一行,为两个整数,依次代表a,b 。
输出:每个回文质数输出一行。测试用例保证输入合法且输出至少包含一个回文质数。

输入样例
100 200
输出样例
101
131
151
181
191

#include <stdio.h>
int main()
{
    int n,m,k;
    int a=0,b=0;
    int ans=1;
    int i=0;
    scanf("%d%d",&a,&b);
    for(n=a; n<=b; n++)
    {
        k=n;
        m=0;  //m"将"为n的反序数
        while(k>0){
            m=m*10+k%10;
            k=k/10;
        }
        if(m==n){   //n等于其反序数,则为回文数
        	for(i=2;i<m;i++){
        		if(m%i==0){
        			ans=0;
				}
			}
            if(ans==1){
            	printf("%d\n", n);
			}
        }
        ans=1;
    }
    return 0;
}

D. 按要求输出
运行时间限制: 1000 运行内存限制: 65536
作者: scsyuanbaoku 是否specialjudge: False
题目描述
输入:第一行为一个正整数n(1<=n<10)。后边是n行,为nXn个整数矩阵,整数间均以一个空格分隔。要求计算并输出该数组的每行每列之和。
输出格式如下所示,每个整数包含符号占五位,右对齐,两个数之间隔一个空格。行末无空格。测试用例保证所有整数可以用int型存储。

输入样例
3
1 2 3
-4 -5 -6
7 8 9
输出样例
1 2 3 6
-4 -5 -6 -15
7 8 9 24
4 5 6

#include<stdio.h>
int main()
{
	int n=0,k=0,l=0;
	int x[10][10]={};
	int sum=0,sum1=0;
	scanf("%d",&n);
	for(k=0;k<n;k++){
		for(l=0;l<n;l++){
			scanf("%d",&x[k][l]);
		}
	}
	for(k=0;k<n;k++){
		for(l=0;l<n;l++){
			sum+=x[k][l];
		}
		for(l=0;l<n;l++){
			printf("%5d ",x[k][l]);
		}
		printf("%5d\n",sum);
		sum=0;
	}
	for(l=0;l<n;l++){
		for(k=0;k<n;k++){
			sum1+=x[k][l];
		}
		printf("%5d ",sum1);
		sum1=0;
	}
	return 0;
}

E. 按要求输出
运行时间限制: 1000 运行内存限制: 65536
作者: scsyuanbaoku 是否specialjudge: False
题目描述
X公司最近研究出了一种新的编码方式,这种编码是将一串大写字母转化为数字。下面是每个字母所代表的数字。
B, F, P, V 代表 1
C, G, J, K, Q, S, X, Z 代表 2。
D , T 代表 3
L 代表 4
M , N 代表 5
R 代表 6。
另外字母A, E, I, O, U, H, W,Y不代表任何数字。你需要将每个字母转化为所代表的数字,但注意,如果连续几个字母都代表同一个数字,那么你只需要转化成一个数字就可以。比如PF,P和F都代表1,所以你只需要输出一个1,而不是两个1。不代表数字的字母不用转化
输入格式
第一行为整数T(0<T<10)代表T行测试数据,后边是T行,每行为一个只含大写字母的字符串,串长不超过20。
输出格式
为T行,每行对应输入的T行测试数据,为该行测试数据的字符串转化后的数字编码,如果没有任何编码,则输出一个空行。

输入样例
3
KHAWN
PFISTER
BOBBY
输出样例
25
1236
11

#include<stdio.h>
int main()
{
	int n,i,j,b=0,a[10][21]={};
	char str[10][21];
	scanf("%d",&n);
	for(i=0;i<n;i++){
	scanf("%s",str[i]);
	for(j=0;(str[i][j]!='\0');j++){
	    if(str[i][j]=='B'||str[i][j]=='V'||str[i][j]=='F'||str[i][j]=='P')
	    b=1;
	    else{
	        if(str[i][j]=='C'||str[i][j]=='G'||str[i][j]=='J'||str[i][j]=='K'||str[i][j]=='Q'||str[i][j]=='S'||str[i][j]=='X'||str[i][j]=='Z')//C, G, J, K, Q, S, X, Z 代表 2。
		        b=2;
		    else{
		        if(str[i][j]=='D'||str[i][j]=='T')
		        b=3;
		    else{
		     	if(str[i][j]=='L')
		     	b=4;
		    else{
		        if(str[i][j]=='M'||str[i][j]=='N')
		        b=5;
		    else{
		        if(str[i][j]=='R')
		       	b=6;
		    else{
			        if(str[i][j]=='A'||str[i][j]=='E'||str[i][j]=='I'||str[i][j]=='O'||str[i][j]=='U'||str[i][j]=='H'||str[i][j]=='W'||str[i][j]=='Y')//A, E, I, O, U, H, W,Y
			        b=0;
	       }
	      }
	     }
	    }
	   }
	  }
	    a[i][j]=b;
	 }
	}
	for(i=0;i<n;i++){
		for(j=0;j<21;j++){
	       if(a[i][j]!=0&&a[i][j]!=a[i][j+1])
	       printf("%d",a[i][j]);
	    }
	    printf("\n");
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值