图像旋转
问题描述
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像顺时针旋转90度。
计算机中的图像可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。例如,下面的矩阵(a)表示原始图像,矩阵(b)表示顺时针旋转90度后的图像。
输入说明
输入的第一行包含两个整数n和m,分别表示图像矩阵的行数和列数。1 ≤ n, m ≤ 100。
接下来n行,每行包含m个非负整数,表示输入的图像,整数之间用空格分隔。
输出说明
输出m行,每行n个整数,表示顺时针旋转90度之后的矩阵,元素之间用空格分隔。
输入样例
2 3
1 5 3
3 2 4
输出样例
3 1
2 5
4 3
#include <stdio.h>
int main()
{
//初始化
int m=0,n=0,i=0,j=0;
scanf("%d%d",&m,&n);
int num[100][100]={0};
int Num[100][100]={0};
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&num[i][j]);
}
}
//旋转
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
Num[i][j]=num[m-1-j][i];
}
}
//打印
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",Num[i][j]);
}
printf("\n");
}
return 0;
}
四位译码器
问题描述
编程完成四位译码器功能,译码转换方式:大写字母==>小写字母,小写字母==>大写
字母,数字==>*,其它符号==>@。
输入格式
输入四个字符(可以是字母、数字或其它字符),字符之间不分割;
输出格式
输出译码转换后的结果。
样例输入 1:
A2c&
样例输入 2:
%3Ua
样例输入 3:
0 W@
样例输出 1:
a*C@
样例输出 2:
@*uA
样例输出 3:
*@w@
样例说明
输入可以是大写字母、小写字母、数字或其他字符混合,也可以是单独一种。
评测用例规模与约定
输入存在单独一种字符情形。
#include <stdio.h>
#include <ctype.h>
int main()
{
//初始化
char password[4];
gets(password);
int i=0;
//译码
for(i=0;i<4;i++)
{
if(isupper(password[i]))
password[i]=tolower(password[i]);
else if(islower(password[i]))
password[i]=toupper(password[i]);
else if(isdigit(password[i]))
password[i]='*';
else
password[i]='@';
}
//输出
for(i=0;i<4;i++)
{
printf("%c",password[i]);
}
return 0;
}
排序2
问题描述:
给定N个不同的整数,要求对这N个整数按如下规则排序并输出。
规则一:所有的偶数排在奇数前面。
规则二:在规则一的前提下按照从大到小的顺序排序。
输入说明
数据由两行构成,第一行为整数n(n<=100),表示待排序整数的数量。第二行是n个整数,每个整数的取值区间都为[-32768~32767],整数之间以空格间隔。
输出说明
在一行输出排好序的整数,整数之间以空格间隔。
输入样例
5
1 2 3 4 5
输出样例
4 2 5 3 1
#include <stdio.h>
void bubble(int arr[],int x)
{
int i=0,j=0;
for(i=0;i<x-1;i++)
{
for(j=0;j<x-1-i;j++)
{
if(arr[j]<arr[j+1])
{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
}
int main()
{
//初始化
int n=0,i=0,k=0;
scanf("%d",&n);
int num[100]={0};
int odd[100]={0};
int even[100]={0};
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
if(num[i] == 0)
{
k=1;
}
}
//赋值,排序,输出
for(i=0;i<n;i++)
{
if(num[i]%2 == 0)
{
even[i]=num[i];
}
else
{
odd[i]=num[i];
}
}
bubble(even,n);
bubble(odd,n);
if(k==0)
{
for(i=0;i<n;i++)
{
if(even[i]!=0)
{
printf("%d ",even[i]);
}
}
}
else if(k=1)
{
for(i=0;i<n;i++)
{
if(even[i]!=0)
{
printf("%d ",even[i]);
}
}
printf("%d ",0);
}
for(i=0;i<n;i++)
{
if(odd[i]!=0)
{
printf("%d ",odd[i]);
}
}
return 0;
}
密码编译
时间限制:1S
内存限制:10000Kb
问题描述:
有一行电文,已按照下面的规律译成密码:
A>>Z a>>z
B>>Y b>>y
C>>X c>>x
. .
. .
. .
等等。即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变,要求编程序将密码译成原文。
输入说明:
输入一串字符(包含7个元素),表示密码。
输出说明:
输出其对应的字符(包含7个元素),表示原文。
输入样例:
ABCDEFG
输出样例:
ZYXWVUT
#include <stdio.h>
int main()
{
char password[7];
int i=0;
gets(password);
for(i=0;i<7;i++)
{
if(password[i]>='A'&&password[i]<='Z')
{
password[i]='A'+'Z'-password[i];
}
else if(password[i]>='a'&&password[i]<='z')
{
password[i]='a'+'z'-password[i];
}
}
puts(password);
return 0;
}
螺旋填数
题目描述:
创建一个m行n列的数组,将1—m*n的数字螺旋填入
方向为右下左上
输入说明:
输入正整数m和n,以空格分隔
输出说明:
输出填好的数组,数组元素之间用空格分隔,数组每行之间以换行分隔
输入示例:
4 5
输出示例:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
#include <stdio.h>
int main()
{
//初始化
int m=0,n=0,i=0,j=0;
scanf("%d%d",&m,&n);
int num[100][100]={0};
//这里有两个方面,第一是运行的时候每次加一,第二是运行到行或者列的尽头需要转换方向
//由于有四个方向,故分为四种情况,使用switch语句运行
int turn=1,k=1;
while(k <= m*n)
{
switch(turn)
{
case 1 ://方向为右
while(num[i][j]==0&&j<n)
{
num[i][j]=k;
k++;
j++;
}
turn = 2;
j--;
i++;
break;
case 2 ://方向为下
while(num[i][j]==0&&i<m)
{
num[i][j]=k;
k++;
i++;
}
turn = 3;
i--;
j--;
break;
case 3 ://方向向左
while(num[i][j]==0&&j>=0)
{
num[i][j]=k;
k++;
j--;
}
turn = 4;
i--;
j++;
break;
case 4 ://方向为上
while(num[i][j]==0&&i>=0)
{
num[i][j]=k;
k++;
i--;
}
turn = 1;
i++;
j++;
break;
}
}
//输出
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",num[i][j]);
}
printf("\n");
}
return 0;
}