浙江大学 PTA 第7部分 选择法排序 求一批整数中出现最多的个位数字 判断上三角矩阵 求矩阵各行元素之和 找鞍点 统计大写辅音字母 字符串替换 字符串转换成十进制整数

本文主要是介绍浙江大学 PTA 第7部分 选择法排序 求一批整数中出现最多的个位数字 判断上三角矩阵 求矩阵各行元素之和 找鞍点 统计大写辅音字母 字符串替换 字符串转换成十进制整数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

习题7-1 选择法排序 (20 分)

本题要求将给定的n个整数从大到小排序后输出。

输入格式:

输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:

在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:

4
5 1 7 6

输出样例:

7 6 5 1

变量方法:

#include "stdio.h"
int main()
{int i,j,k,n;printf("please input a intege n:");scanf("%d",&n);// 读取 n 值 int a[n],max;  //创建数组 及 变量 max 用于记录最大值for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n-1;i++) //外层循环 {max=a[i]; //max 初始化 k=i;	  //最大值下表记录 {for(j=i+1;j<n;j++) //内层循环 if(a[j]>max)   //遇到更大的数 {max=a[j];	//最大值和下标 变更 k=j;}}a[k]=a[i];	//交换外层循环起始元素和最大值 a[i]=max;}for(i=0;i<n;i++) 	//输出  if(i!=n-1) printf("%d ",a[i]);else 	printf("%d\n",a[i]);
}

指针方法

#include "stdio.h"
int main()
{int i,j,k,n;printf("please input a intege n:");scanf("%d",&n);// 读取 n 值 int a[n],*pa;  //创建数组 及 变量 *pa 用于记录最大值for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n-1;i++) //外层循环 {pa=&a[i]; //指针 初始化  {for(j=i+1;j<n;j++) //内层循环 if(a[j]>*pa)   //遇到更大的数 pa=&a[j];	//指针指向最大值}k=*pa;	//最大值赋给临时变量 *pa=a[i];	//交换外层循环起始元素和最大值 a[i]=k;}for(i=0;i<n;i++) 	//输出  if(i!=n-1) printf("%d ",a[i]);else 	printf("%d\n",a[i]);
}

习题7-2 求一批整数中出现最多的个位数字 (20 分)

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:

输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。

输出格式:

在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

输入样例:

3
1234 2345 3456

输出样例:

3: 3 4
#include "stdio.h"
int main()
{int i,j,k,n;printf("please input a intege n:");scanf("%d",&n);// 读取 n 值 int a[n];  //创建数组 及 变量 *pa 用于记录最大值for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)printf("%d:",a[i]);int b[10]={0}; //分别记录 0,1,2,3,4,5,6,7,8,9每个数字出现的次数 for(i=0;i<n;i++) //外层循环 {while (a[i]%10>0){j=a[i]%10;b[j]++;a[i]/=10;//printf("j= %d,b[%d] = %d\n",j,j,b[j]) ;}}//for(i=0;i<10;i++) 	//输出-9出现的次数//printf("%d\n",b[i]);j=b[0];//假设 0 出现的次数最多 for(i=0;i<10;i++) 	//查找出现次数最多的数  if(b[i]>j) j=b[i]; 	printf("%d:",j);for(i=0;i<=10;i++)if(b[i]==j) printf(" %d",i);printf(" \n");
}

习题7-3 判断上三角矩阵 (15 分)

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

输入格式:

输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。

输入样例:

2
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2

输出样例:

YES
NO
#include "stdio.h"
#include "stdlib.h"
#include "windows.h"
int sn=0;//定义全局变量 传递数组 阵列大小
/*函数:判断是否为上三角矩阵 是 0 非 >0*/ 
int Yes_or_No(int *pyn[sn])
{int i,j,k=0;for(i=0;i<sn;i++)for(j=0;j<i;j++)if(pyn[i][j]!=0) k++;//做对角线下部的元素不为 0 计数器 +1 return k;
}
/*函数:创建矩阵*/ 
int Create_sz(int *pcr[sn])
{int i,j;int shuzu[sn][sn]; for(i=0;i<sn;i++){pcr[i]=shuzu[i];//指针与创建数组行号逐一对应 for(j=0;j<sn;j++)scanf("%d",&pcr[i][j]);}	
}
/*输出函数*/
out_put(int *result,int t)
{int i; for(i=0;i<t;i++)if(result[i]>0)printf("NO\n");else printf("Yes\n");
}	
/*主函数*/ 
int main()
{int i,t;//printf("please input a intege n: ");scanf("%d",&t);// 读取 n 值 int result[t];//存储判断结果 for(i=0;i<t;i++)//循环创建 数组 并 存储判断结果 {scanf("%d",&sn);int *psz[i][sn];Create_sz(psz[i]);result[i]=Yes_or_No(psz[i]);	}out_put(result,t);/*输出*/	system("pause");
}

习题7-4 求矩阵各行元素之和 (15 分)

本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

输入格式:

输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间

以空格分隔。

输出格式:

每行输出对应矩阵行元素之和。

输入样例:

3 2
6 3
1 -8
3 12

输出样例:

9
-7
15

简单数组:

#include "stdio.h"
#include "windows.h"
/*主函数*/ 
int main()
{int i,j,k,m,n;//printf("please input a intege n: ");scanf("%d%d",&m,&n);// 读取 m n 值  int as[m][n];for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&as[i][j]);for(i=0;i<m;i++){k=0;for(j=0;j<n;j++)k+=as[i][j];printf("%d\n",k);}system("pause");
}

指针及结构化

#include "stdio.h"
#include "windows.h"
/*函数:创建数组矩阵*/
void *create_s(int * p[],int m,int n)
{int i,j;for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&p[i][j]);//读取数组矩阵数值
}
/*函数:计算数组矩阵并输出*/
void out_p(int * p[],int m,int n)
{int i,j,k;for(i=0;i<m;i++){k=0;for(j=0;j<n;j++)//计算k+=p[i][j];printf("%d\n",k);//输出结果}
}
/*主函数*/ 
int main()
{int i,j,k,m,n;//printf("please input a intege n: ");scanf("%d%d",&m,&n);// 读取 m n 值  int as[m][n]; //定义数组int *ps[m];   //定义数组指针for(i=0;i<m;i++) //指针与数组建立对应关系ps[i]=as[i];create_s(ps,m,n);//获取数值out_p(ps,m,n);    //输出结果system("pause");
}

习题7-5 找鞍点 (20 分)

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:

输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

输出样例1:

2 1

输入样例2:

2
1 7
4 1

输出样例2:

NONE

待修改

#include "stdio.h"
#include "windows.h"
/*函数:创建数组矩阵*/
void *create_s(int * p[],int m)
{int i,j;for(i=0;i<m;i++)for(j=0;j<m;j++)scanf("%d",&p[i][j]);
}
/*函数:计算数组矩阵并输出*/
void out_p(int * p[],int m)
{int i,j,k,sm,sn,max,min,count=0;for(i=0;i<m;i++){max=p[i][0];sm=0;for(j=1;j<m;j++)//查找每行最大值 记录 列标if(max<p[i][j]){	max=p[i][j];sm=j;}min=max;for(k=0;k<m;k++)//查找 每行最大值所在列的 最小值 记录行标if(min>p[k][sm]) {	min=p[k][sm];sn=k;}if(sn==i) //行标与当前循环行号相同,是鞍点{printf("%d %d\n",i,sm);count++;	//鞍点 计数  }  }if(count==0)	printf("NONE\n");}
/*主函数*/ 
int main()
{int i,j,k,m;//printf("please input a intege n: ");scanf("%d",&m);// 读取 m n 值  int as[m][m];//定义矩阵int *ps[m];//定义指针for(i=0;i<m;i++)//指针与矩阵对应ps[i]=as[i];create_s(ps,m);//获取矩阵数据out_p(ps,m);//输出结果system("pause");
}

习题7-6 统计大写辅音字母 (15 分)

英文辅音字母是除AEIOU以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出字符串中大写辅音字母的个数。

输入样例:

HELLO World!

输出样例:

4

代码中有3中可用情况,(保留最简单部分)

#include "stdio.h"
#include "string.h"
/*输入函数*/
char *input_s(char *ps)
{gets(ps);
}
/*输出函数*/
int output_s(int n)
{printf("%d\n",n);
} 
/*处理函数*/
int count_s(char *ps)
{int i,sum=0;while(*ps!='\0'){if(*ps>='A'&&*ps<='Z')// ?大写字母 {i=*ps-'A'; // ascii 差值 if(i!=0&&i!=4&&i!=8&&i!=14&&i!=20) sum++;}ps++;}return sum;	
} 
/*主函数*/
int main()
{char gs[81],*ps;int result=0;ps=gs;input_s(ps);result=count_s(ps);output_s(result);	
} 
/*其他情况*/ 
/*if(i!=0&&i!=4&&i!=8&&i!=14&&i!=20) sum++;	 等价于下列情况*/
//		switch(i)
//			{
//				case 0:		// A
//				case 4:		// E
//				case 8:		// I	
//				case 14:	// O
//				case 20:	// U 
//					break;
//				default: 	//其他大写字母情况 
//					sum++;	 break;		
//			} 
/*default 等价于下列情况*/ 
//				case 1:
//				case 2: 
//				case 3: 
//				case 5: 
//				case 6: 
//				case 7: 
//				case 9: 
//				case 10:  
//				case 11: 
//				case 12: 
//				case 13: 
//				case 15: 
//				case 16: 
//				case 17: 
//				case 18: 
//				case 19: 
//				case 21: 
//				case 22: 
//				case 23: 
//				case 24: 
//				case 25: 
//					sum++;	 break;	

习题7-7 字符串替换 (15 分)

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:

原字母对应字母
AZ
BY
CX
DW
XC
YB
ZA

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出替换完成后的字符串。

输入样例:

Only the 11 CAPItaL LeTtERS are replaced.

输出样例:

Lnly the 11 XZKRtaO OeGtVIH are replaced.
#include "stdio.h"
#include "string.h"
/*输入函数*/
char *input_s(char *ps)
{gets(ps);
}
/*输出函数*/
int *output_s(char *ps)
{puts(ps);
} 
/*转换函数*/
int resevor_s(char *ps)
{int i;while(*ps!='\0'){if(*ps>='A'&&*ps<='Z')// ?大写字母 {i=*ps-'A'; // ascii 差值 
/*转换关系为 互相转换的两个大写字母 与 'A' 的差值 之和为 25*/ *ps='A'+25-i;//转换 }ps++;}
} 
/*主函数*/
int main()
{char gs[81],*ps;ps=gs;input_s(ps);resevor_s(ps);output_s(ps);	
}  

习题7-8 字符串转换成十进制整数 (15 分)

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:

+-P-xf4+-1!#

输出样例:

-3905
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int flag=1;//输出符号 ± 
/*输入函数*/
char *input_s(char *ps)
{while((*ps=getchar())!='#')ps++;
}
/*输出函数*/
int *output_s(char *ps)
{int i; long sum=0;while(*ps!='\0')//逐一取出 转化为 16进制数 {if(*ps>='0'&&*ps<='9')i=*ps-'0';if(*ps>='a'&&*ps<='f')i=*ps-'a'+10;if(*ps>='A'&&*ps<='F')i=*ps-'A'+10;sum=sum*16+i; // 计算10进制结果 ps++;}printf("%ld\n",sum*flag)	;//带符号输出 
} 
/*转换函数*/
char *resevor_s(char *ps,char *pigs)
{int count=0;// '-' 号计数 while(*ps!='\0'){if(*ps=='-') count++;if(*ps>='0'&&*ps<='9'||*ps>='a'&&*ps<='f'||*ps>='A'&&*ps<='F')// ?16进制数 {*pigs=*ps;//符合16进制数 ? 存入pigs   pigs++;}ps++;}if(count>0) flag*=-1;//存在 '-' 则符号转换 
} 
/*主函数*/
int main()
{char gs[81],*ps;char  igs[81],*pigs; ps=gs;pigs=igs;input_s(ps);resevor_s(ps,pigs);output_s(pigs);	
}  

 

 

 

这篇关于浙江大学 PTA 第7部分 选择法排序 求一批整数中出现最多的个位数字 判断上三角矩阵 求矩阵各行元素之和 找鞍点 统计大写辅音字母 字符串替换 字符串转换成十进制整数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/626636

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int

hdu 1285(拓扑排序)

题意: 给各个队间的胜负关系,让排名次,名词相同按从小到大排。 解析: 拓扑排序是应用于有向无回路图(Direct Acyclic Graph,简称DAG)上的一种排序方式,对一个有向无回路图进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u 在v 的前面。该序列说明了顶点表示的事件或状态发生的整体顺序。比较经典的是在工程活动上,某些工程完成后,另一些工程才能继续,此时

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

多重背包转换成0-1背包

http://acm.hdu.edu.cn/showproblem.php?pid=2191 多重背包特点: 一种物品有C个(既不是固定的1个,也不是无数个) 优化的方法: 运用神奇的二进制,进行物品拆分,转化成01背包 物品拆分,把13个相同的物品分成4组(1,2,4,6) 用这4组可以组成任意一个1~13之间的数! 原理:一个数总可以用2^