Contest 7
选择排序
Description
输入一个正整数n(1<n<=10),再输入n个整数,将他们从大到小排序后输出。试编写相应程序。
Input
先输入一个n 然后在输入n个数,都是整数形式。
Output
输出从大到小排序后的数。中间用空格隔开,输出结尾不保留空格。
Sample Input 1
5
1 2 3 4 5
Sample Output 1
5 4 3 2 1
//国庆之后很快就是测验了,考到数组,不考指针
//打印地址 %p
#include<stdio.h>
int n;
int a[100];
void qsort(int arr[],int low,int high){
if(low<high){
int i=low,j=high,k=arr[low];
while(i<j){
while(i<j && arr[j]>=k)j--;
if(i<j)arr[i++]=arr[j];
while(i<j && arr[i]<k)i++;
if(i<j)arr[j--]=arr[i];
}
arr[i]=k;
qsort(arr,low,i-1);
qsort(arr,i+1,high);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
qsort(a,1,n);
for(int i=n;i>=1;i--)printf("%d ",a[i]);
return 0;
}
求一批整数出现最多的数字。
Description
输入一个正整数n(1<n<=1000),再输入n个整数,分析每个整数的每一位数字,求出现次数最多的数字。
例如输入n个整数,分析每个整数的每一位数字,求出现次数最多的数字。例如输入3个整数1234、2345、3456,
其中出现次数最多的数字是3和4,均出现了3次。试编写相应程序。
Input
输入一个正整数n(1<n<=1000),再输入n个整数。
Output
输出出现次数最多的数字,如果是多个数字同时出现,按从小到大输出,之间用空格隔开,最后无空格。
Sample Input 1
3
1234 2345 3456
Sample Output 1
3 4
//国庆之后很快就是测验了,考到数组,不考指针
//打印地址 %p
#include<stdio.h>
int n;
int a[1666],b[10];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
int tmp,ans=0;
for(int i=1;i<=n;i++){
tmp=a[i];
while(tmp){
b[tmp%10]++;
tmp/=10;
}
}
for(int i=0;i<=9;i++){
if(b[i]>ans)ans=b[i];
}
for(int i=0;i<=9;i++){
if(b[i]==ans)printf("%d ",i);
}
}
判断上三角矩阵
Description
输入一个正整数n(1<=n<=6)和n阶方阵a中的元素,如果a是上三角矩阵,输出”YES”,否则输出“NO”。
Input
输入一个正整数n(1<=n<=6)和n阶方阵a中的元素,方阵中a的元素为整数形式
Output
如果a是上三角矩阵,输出”YES”,否则输出“NO”。
Sample Input 1
3
1 2 3
4 5 6
0 12 8
Sample Output 1
NO
Sample Input 2
3
1 2 3
0 1 2
0 0 1
Sample Output 2
YES
Hint
上三角矩阵指主对角线以下的元素全都为零的矩阵,主对角线为矩阵的左上角至右下角的连线。试编写相应程序。
//国庆之后很快就是测验了,考到数组,不考指针
//打印地址 %p
#include<stdio.h>
int n,ans=1;
int main(){
scanf("%d",&n);
int tmp;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&tmp);
if(tmp && j<=i-1)ans=0;
}
}
if(ans)printf("YES");
else printf("NO");
}
求矩阵各行元素之和。
Description
输入2个正整数m和n(1<=m<=6,1<=n<=6),然后输入矩阵a(m行n列)中的元素,分别求出各行元素之和,并输出。试编写相应程序。
Input
输入2个正整数m和n(1<=m<=6,1<=n<=6),然后输入矩阵a(m行n列)中的元素,矩阵中的元素均为整数。
Output
依次输出各行元素之和,也是整数形式。
Sample Input 1
2 4
1 2 3 4
4 5 6 7
Sample Output 1
10 22
//国庆之后很快就是测验了,考到数组,不考指针
//打印地址 %p
#include<stdio.h>
int n,m;
int main(){
scanf("%d%d",&m,&n);
int tmp,tmp1;
for(int i=1;i<=m;i++){
tmp=0;
for(int j=1;j<=n;j++){
scanf("%d",&tmp1);
tmp+=tmp1;
}
printf("%d ",tmp);
}
}
找鞍点
Description
输入1个整数n(1<=n<=6)和n阶方阵a中的元素,假设方阵a最多有1个鞍点,如果找到a的鞍点,就输出其下标,否则,输出“NO”。
鞍点的元素值在该行上最大,该列上最小,试编写相应程序。
Input
输入1个整数n(1<=n<=6)和n阶方阵a中的元素,元素为整数形式
Output
如果找到a的鞍点,就输出其下标,否则,输出“NO”.
Sample Input 1
3
1 2 3
4 5 6
7 8 9
Sample Output 1
0 2
Hint
鞍点的元素值在该行上最大,该列上最小,试编写相应程序。
#include <stdio.h>
int main()
{
int a[10][10];
int n,i,k,j,max,min,max1,max2,flag=0 ;
scanf("%d",&n);
for ( i = 0; i < n; i++)
{
for ( k = 0; k < n; k++)
{
scanf("%d",&a[i][k]);
}
}
for ( i = 0; i < n; i++)
{
max=a[i][0];
max1=i;
max2=0;
for ( k = 0; k < n; k++)
{
if (max<=a[i][k])
{
max=a[i][k];
max1=i;
max2=k;
}
}
flag=1;
min=a[max1][max2];
for ( j = 0; j < n; j++)
{
if (min>a[j][max2])
{
flag=0;
break;
}
}
if(flag==1)break;
}
if (flag==1)
{
printf("%d %d",max1,max2);
}
else if (flag==0)
{
printf("NO");
}
return 0;
}
统计大写辅音字母
Description
输入一行字符串(少于100个字符),包含空格和特殊符号等。 统计并输出其中大写辅音字母的个数。
大写辅音字母是指除'A' , 'E' , 'I' , ' O ' , ' U '以外的大写字母。试编写相应程序。
Input
输入一行字符串(少于100个字符),包含空格和特殊符号等。
Output
输出该字符串中包含大写辅音字母的数量。
Sample Input 1
DASE school
Sample Output 1
2
#include<stdio.h>
int main()
{
char a[100];
int i=0,count=0;
gets(a);
for (i=0;a[i]!='\0';i++)
{
if (a[i]>='B'&&a[i]<='Z'&&a[i]!='E'&&a[i]!='I'&&a[i]!='O'&&a[i]!='U')
{
count++;
}
}
printf("%d",count);
return 0;
}
字符串替换
Description
输入一个字符串(少于 80 个字符),包含空格和特殊符号等。将其中的大写字母用下面列出的对应大写字母替换,
其余字符不变, 输出替 换后的字符串。试编写相应程序。
原字母对应字母
A ——> Z
B ——> Y
C ——> X
D ——> W
...
X ——> C
Y ——> B
Z ——> A
Input
输入一个字符串(少于 80 个字符),包含空格和特殊符号等。
Output
输入一个字符串(少于 80 个字符),包含空格和特殊符号等。
Sample Input 1
DASE
Sample Output 1
WZHV
Sample Input 2
HSAHD NDUEAPSJDI wiziaijsdzjisiadasdde
Sample Output 2
SHZSW MWFVZKHQWR wiziaijsdzjisiadasdde
#include <stdio.h>
int main()
{
char str[80];
int i=0;
while ((str[i]=getchar())!=EOF)
{
i++;
}
int j=i;
for ( i = 0; i<j; i++)
{
if (str[i]>='A'&&str[i]<='Z')
{
str[i]='A'+'Z'-str[i];
}
}
for ( i = 0; i<j; i++)
{
printf("%c",str[i]);
}
return 0;
}
字符串转换成十进制整数。
Description
输入一个以字符 "" #"" 结束的字符串, 滤去所有的非十六进 制字符 (不分大小写),
组成一个 新的表示十六进 制数字的 字符 串, 然后 将其转换为十进制 数后输出 。
如果过滤后字符串的首字符为 "-", 代表该 数是负数。试编写相应程序。
Input
输入一个以字符 "" #"" 结束的字符串
Output
输出该字符串对应生成的十进制表示
Sample Input 1
-sasd#
Sample Output 1
-173
//国庆之后很快就是测验了,考到数组,不考指针
//打印地址 %p
#include<stdio.h>
int flag=1,ans=0;
int a[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int main(){
char c;
while((c=getchar())!='#'){
if(c=='-'&&flag==1)flag=-1;
else if(c>='0'&&c<='9')ans=(ans<<4)+a[c-'0'];
else if(c>='a'&&c<='f')ans=(ans<<4)+a[c-'a'+10];
else if(c>='A'&&c<='F')ans=(ans<<4)+a[c-'A'+10];
}
ans=ans*flag;
printf("%d",ans);
}