欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

几道有意思的编程题

程序员文章站 2024-03-13 08:25:09
...

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

将持续寻找有趣的题;