几道有意思的编程题
所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
输入格式:
输入在一行中给出一个正整数N(<10)。
输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占3位。
输入样例:
5
输出样例:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
#include<stdio.h>
#include<string.h>
int main(void)
{
int n,num=1;
int i,j;
scanf("%d",&n);
int a[100][100]={0};
int m=0,k=n-1;
while(m<k){
for(i=m;i<k;i++){
a[m][i]=num;
num++;
}
for(i=m;i<k;i++){
a[i][k]=num;
num++;
}
for(i=k;i>m;i--){
a[k][i]=num;
num++;
}
for(i=k;i>m;i--){
a[i][m]=num;
num++;
}
m++;
k--;
}
if(n%2!=0){
a[n/2][n/2]=num;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%3d",a[i][j]);
}
printf("\n");
}
}
本题要求编写程序,针对输入的N个字符串,输出其中最小的字符串。
输入格式:
输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。
输出格式:
在一行中用以下格式输出最小的字符串:
Min is: 最小字符串
输入样例:
5
Li
Wang
Zha
Jin
Xian
输出样例:
Min is: Jin
#include<stdio.h>
#include<string.h>
int main(void)
{
int n,i,j;
char a[80];
scanf("%d",&n);
char s[n][80];
getchar();
for(i=0;i<n;i++){
scanf("%s",s[i]);
}
strcpy(a,s[0]);
for(i=0;i<n;i++){
if((i+1)==n){break;
}
if(strcmp(s[i],s[i+1])>0){
strcpy(a,s[i+1]);
}
}
if(n==0){
printf("Min is: %s",6487536);
}
else
printf("Min is: %s",a);
}
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
输出样例:
red blue green yellow purple
#include<stdio.h>
#include<string.h>
int main(void)
{
int i=0,j,k,flag=0;
char s[20][10];
while(gets(s[i])){
if(s[i][0]=='#'){
break;
}
i++;
}
// for(j=0;j<i;j++){
// printf("%s\n",s[j]);
// }
char a[200],b[20];
for(j=0;j<i-1;j++){
for(k=0;k<i-j-1;k++){
if(strlen(s[k])>strlen(s[k+1])){
strcpy(b,s[k]);
strcpy(s[k],s[k+1]);
strcpy(s[k+1],b);
}
}
}
for(j=0;j<i;j++){
printf("%s ",s[j]);
}
}
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有R
a
行、C
a
列,B有R
b
行、C
b
列,则只有C
a
与R
b
相等时,两个矩阵才能相乘。
输入格式:
输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。
输出格式:
若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb,其中Ca是A的列数,Rb是B的行数。
输入样例1:
2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8
输出样例1:
2 4
20 22 24 16
53 58 63 28
输入样例2:
3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72
输出样例2:
Error: 2 != 3
#include<stdio.h>
#include<string.h>
int main(void)
{
int n,m,q,w,i,j;
int a[100][100],b[100][100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++){
for(j=0;j<m;j++){
scanf("%d",&a[i][j]);
}
}
scanf("%d %d",&q,&w);
for(i=0;i<q;i++){
for(j=0;j<w;j++){
scanf("%d",&b[i][j]);
}
}
//printf("mamaya\n");
if(m==q){
int k=0,flag=1;
int c[n][w];
memset(c,0,sizeof(c));
for(i=0;i<n;i++){
for(j=0;j<w;j++){
for(k=0;k<q;k++){
c[i][j]+=a[i][k]*b[k][j];
}
}
}
//printf("mamaya\n");
printf("%d %d\n",n,w);
for(i=0;i<n;i++){
for(j=0;j<w;j++){
printf("%d",c[i][j]);
if(j<w-1){
printf(" ");
}
}
printf("\n");
}//printf("mamaya\n");
}
else{
printf("Error: %d != %d",m,q);
}
}
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的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(void)
{
int a[6][6];
int n;
scanf("%d",&n);
int i,j,k,min=100,max=-100,q,b;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++){
max=-100;
for(j=0;j<n;j++){
if(max<a[i][j]){
max=a[i][j];
b=j;
q=i;
}
}
min=10000;
for(k=0;k<n;k++){
if(a[k][b]<min){
min = a[k][b];
//printf("1111111111\n");
}
}
// printf("%d %d\n",max,min);
if(min == max){
printf("%d %d",q,b);
return 0;
}
}
// if(flag==0)
printf("NONE");
}
将持续寻找有趣的题;
上一篇: MyBatis入门初体验之使用大全(2)
下一篇: java程序运行时内存分配详解