本文主要是介绍浙江大学 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 分)
英文辅音字母是除A
、E
、I
、O
、U
以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。
输入格式:
输入在一行中给出一个不超过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 分)
本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:
原字母 | 对应字母 |
---|---|
A | Z |
B | Y |
C | X |
D | W |
… | … |
X | C |
Y | B |
Z | A |
输入格式:
输入在一行中给出一个不超过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部分 选择法排序 求一批整数中出现最多的个位数字 判断上三角矩阵 求矩阵各行元素之和 找鞍点 统计大写辅音字母 字符串替换 字符串转换成十进制整数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!