几道有意思的编程题

所谓“螺旋方阵”,是指对任意给定的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");
}

将持续寻找有趣的题;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值