目录
1.选择法排序。
2.求一批整数中出现最多的数字。
3.判断上三角矩阵。
4.求矩阵各行元素之和。
5.求鞍点。
6.统计大写辅音字母。
7.字符串替换。
8.字符串转换成十进制整数。
1.选择法排序。
输入一个正整数n(1<n≤10),再输入n个整数,将它们从大到小排序后输出。试编写相应程序。
本题要求将给定的n个整数从大到小排序后输出。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
4 5 1 7 6
输出样例:
7 6 5 1
#include<stdio.h>
int main()
{
int a[10];
int n;
scanf("%d",&n);
int i,j;
for(i=0;i<n;i++)//输入数组内数字
scanf("%d",&a[i]);
int max,temp;
for(j=0; j<n; j++)//选择排序
{
max = j;
for(i=j+1; i<n; i++)
{
if(a[max]<a[i])
max = i;
}
temp = a[j];
a[j] = a[max];
a[max] = temp;
}
for(i=0;i<n-1;i++)//输出
printf("%d ",a[i]);
printf("%d",a[n-1]);
return 0;
}
2.求一批整数中出现最多的数字。
输入一个正整数n(1<n≤1 000),再输入n个整数,分析每个整数的每一位数字,求出现次数最多的数字。例如输入3个整数1234、2345、3456,其中出现次数最多的数字是3和4,均出现了3次。试编写相应程序。
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定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 n,i,x;
int mostC[10]= {0}; //设每个数字出现的次数为0
scanf("%d",&n);
for(i=0; i<n; i++) {
scanf("%d",&x);
if(x==0)//输入数字为0时,0出现一次
mostC[0]++;
else {
while(x>0) { //记录每个数字出现的次数
mostC[x%10]++;
x/=10;
}
}
}
int max = 0;//出现的最多次数
for(i=0; i<10; i++) {
if(max<mostC[i])
max = mostC[i];
}
printf("%d:",max);
for(i=0; i<10; i++)
if(mostC[i]==max)//找和最多出现次数相等的数字
printf(" %d",i);
return 0;
}
3.判断上三角矩阵。
输入一个正整数n(1≤n≤6)和 n 阶方阵 a 中的元素,如果 a 是上三角矩阵,输出 “ YES ”,否则,输出 “ NO ”。上三角矩阵指主对角线以下的元素都为0的矩阵,主对角线为矩阵的左上角至右下角的连线。 试编写相应程序。
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。
输入样例:
3 3 1 2 3 0 4 5 0 0 6 2 1 0 -8 2 3 1 2 3 1 4 5 0 -1 6
输出样例:
YES NO NO
矩阵的坐标位置间的关系:
#include<stdio.h>
int main(){
int T;
scanf("%d",&T);//输入待测矩阵的个数
int n;
int x;
while(T--){
int flag = 1;//标记,flag=1是上三角矩阵,否则flag=0不是
scanf("%d",&n);
for(int i=0;i<n;i++){//n行
for(int j=0;j<n;j++){//列
scanf("%d",&x);
if(i>j && x!=0){
flag = 0;
}
}
}
if(flag == 1){
printf("YES\n");
}else {
printf("NO\n");
}
}
return 0;
}
4.求矩阵各行元素之和。
输入2个正整数 m和 n(1≤m≤6,1≤n≤6),然后输入矩阵a(m行n列)中的元素,分别求出各行元素之和,并输出。试编写相应程序。
本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间
以空格分隔。
输出格式:
每行输出对应矩阵行元素之和。
输入样例:
3 2 6 3 1 -8 3 12
输出样例:
9 -7 15
#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int a[m][n];
for(int i=0;i<m;i++){
int sum=0;
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
sum+=a[i][j];
}
printf("%d\n",sum);
}
return 0;
}
5.求鞍点。
输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,假设方阵a最多有1个鞍点,如果找到a的鞍点,就输出其下标,否则,输出 “ NO ”。鞍点的元素值在该行上最大,在该列上最小。试编写相应程序。
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的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>
int main(){
int arr[6][6];//题目中说明:1≤n≤6
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&arr[i][j]);
int Hmax=0,Lmin=0;
int L=-1,H=-1;
for(int i=0;i<n;i++){
Hmax = arr[i][0];
for(int j=0;j<n;j++){
if(arr[i][j] >= Hmax){//找i行里面的最大的数,所在的列
Hmax = arr[i][j];
L = j;
}
}
Lmin = arr[0][L];
for(int k=0;k<n;k++){//遍历L列所在的每一行
if(arr[k][L] <= Lmin){//列里面找最小
Lmin = arr[k][L];
H = k;
}
}
if(Hmax == Lmin){
break;
}
}
if(Hmax == Lmin){
printf("%d %d",H,L);
}else{
printf("NONE");
}
return 0;
}
6.统计大写辅音字母。
输入一个以回车结束的字符串(少于80个字符),统计并输出其中大写辅音字母的个数。大写辅音字母是指除 'A', 'E', 'I', 'O', 'U'以外的大写字母。试编写相应程序。
英文辅音字母是除
A
、E
、I
、O
、U
以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:
输出在一行中给出字符串中大写辅音字母的个数。
输入样例:
HELLO World!
输出样例:
4
#include<stdio.h>
int main()
{
char ch[90];
gets(ch);
int i=0;
int num=0;//统计大写辅音字母的个数
while(ch[i]!='\0')
{
if((ch[i]>='B'&&ch[i]<='Z')&&ch[i]!='E'&&ch[i]!='I'&&ch[i]!='O'&&ch[i]!='U')
num++;
i++;
}
printf("%d",num);
return 0;
}
7.字符串替换。
输入一个回车结束的字符串(少于80个字符),将其中的大写字母用下面列出的对应大写字母替换,其余字符不变,输出替换后的字符串。试编写相应程序。
原字母对应字母
…
本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:
原字母 对应字母 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>
int main(){
char ch[80],op;
int len = -1;
while(1){
scanf("%c",&op);
if(op=='\n')
break;
else
len++;
ch[len] = op;
}
for(int i=0;i<=len;i++){
if(ch[i]>='A'&&ch[i]<='Z'){
ch[i] = 155-ch[i];
}
}
for(int i=0;i<=len;i++){
printf("%c",ch[i]);
}
return 0;
}
8.字符串转换成十进制整数。
输入一个以字符 “ # ”结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为 “ - ”,代表该数是负数。试编写相应程序。
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
+-P-xf4+-1!#
输出样例:
-3905
#include<stdio.h>
int main(){
char op[80];
char ch;
int n=0;//十六进制字符个数
int flag = 1;//标记符号
do{
scanf("%c",&ch);
if((ch>='a'&&ch<='f') || (ch>='A'&&ch<='F') || (ch>='0'&&ch<='9')){
op[n] = ch;
n++;
}
if(ch=='-' && n==0){//在第一个十六进制字符之前存在字符“-”
flag = -1;
}
}while(ch != '#');
int sum = 0;
int c = 1;
for(int i=n-1;i>=0;i--){
if(op[i]>='a'&&op[i]<='z')
sum+=(op[i]-'a'+10)*c;
if(op[i]>='A'&&op[i]<='Z')
sum+=(op[i]-'A'+10)*c;
if(op[i]>='0'&&op[i]<='9')
sum+=(op[i]-'0')*c;
c*=16;
}
printf("%d",flag*sum);
return 0;
}