2020秋季C语言练习题(7)

A. 路标******
运行时间限制: 1000 运行内存限制: 65536
作者: bupt_admin 是否specialjudge: False
题目描述
题目描述
公元13世纪上半叶,蒙古军队一路西征杀向欧洲。在进军途中,蒙古骑兵以旗为单位沿一条道路相继开进。为了给后面的队伍指路,每当遇到一个道路分叉处时,就在路旁堆石头堆作路标,堆一堆石头表示直行,堆两堆石头表示右转,堆三堆石头表示左转。试用C语言编写一个程序,计算出通过的路口数目。假设每个相邻路口间路段的长度基本相等且开始的方向向西(以此判断第一个路口,即出发时向哪个方向走),用输出eswn四个字母或其组合来确定最终的地点相对于出发地(即第一个路口)的方位。
输入格式
只有一行(以’\n’结束),分别用1、2和3表示路口遇到的石碓的数量,最多有20个路口。
输出格式
只有一行,由一个数字和一个字母或两个字母组合分别构成路口的数目和最终地点与出发地的方位。如果需要输出两个字母,则输出字母按照字典序输出(不用考虑回到原始出发点的情况)。

输入样例
31
输出样例
2,s

#include<stdio.h>
#include<string.h>
int main()
{
	char s[100]="\0",d='w',c[12]="\0";
	int a=0,b=0,i=0;
	scanf("%s",s);
	for(i=0;s[i]!='\0';i++){
		if(d=='w'){
			if(s[i]=='1')b++;
			else if(s[i]=='2'){
				a++;
				d='n';
			}
			else if(s[i]=='3'){
				a--;
				d='s';
			}
		}
		else if(d=='s'){
			if(s[i]=='1')a--;
			else if(s[i]=='2'){
				d='w';
				b++;
			}
			else if(s[i]=='3'){
				d='e';
				b--;
			}
		}
		else if(d=='e'){
			if(s[i]=='1')b--;
			else if(s[i]=='2'){
				d='s';
				a--;
			}
			else if(s[i]=='3'){
				d='n';
				a++;
			}
		}
		else if(d=='n'){
			if(s[i]=='1')a++;
			else if(s[i]=='2'){
				d='e';
				b--;
			}
			else if(s[i]=='3'){
				d='w';
				b++;
			}
		}
	}
	if(a<0){
		if(b>0)printf("%d,sw",i);
		else if(b<0)printf("%d,es",i);
		else if(b==0)printf("%d,s",i);
	}
	else if(a==0){
		if(b>0)printf("%d,w",i);
		else if(b<0)printf("%d,e",i);
	}
	else if(a>0){
		if(b>0)printf("%d,nw",i);
		else if(b==0)printf("%d,n",i);
		else if(b<0)printf("%d,en",i);
	}
	return 0;
}

在这里插入图片描述

#include<stdio.h>
#include<string.h>
int main()
{
	char s[100]={};
	int n=0;
	int i=0;
	int j=0;
	scanf("%d",&n);
	for(j=0;j<n;j++){
		scanf("%s",s);
		if(strlen(s)<=31){
			if(s[0]=='_'||s[0]>='a'&&s[0]<='z'||s[0]>='A'&&s[0]<='Z'){
				for(i=1;s[i]!='\0';i++){
					if(s[i]=='_'||s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'||s[i]>='0'&&s[i]<='9'){
						continue;
					}
					else{
						printf("no\n");
						break;
						}
				}
				if(s[i]=='\0')
				printf("yes\n");
			}
			else printf("no\n");	
		}
		else printf("no\n");
	}
	return 0;
}

C. 螺旋矩阵******
运行时间限制: 1000 运行内存限制: 65536
作者: scsyuanbaoku 是否specialjudge: False
题目描述
输入一个正整数n,0<n<10。从左上角元素开始,用1到n平方的正整数,按顺时针螺旋方式填充nXn二维数组,如下图所示(当n=4时)。按行输出所得二维数组。每个整数占两个字符位置右对齐,两个整数之间用一个空格分隔。行末没有空格。
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

输入样例
4
输出样例
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

#include <stdio.h>
int main()
{
    int n,h,l,i,x=1;
    int a[100][100];
    scanf("%d",&n);
    h=0;
    l=n-1;
    do
    {
        for(i=(n-1-l);i<=l;i++)
            a[h][i]=x++;
        for(i=h+1;i<=(n-1-h);i++)
            a[i][l]=x++;
        for(i=l-1;i>=(n-1-l);i--)
            a[n-1-h][i]=x++;
        h++;
        for(i=(n-1-h);i>=h;i--)
            a[i][n-1-l]=x++;
        l--;
    }while(x<=(n*n));
    for(i=0;i<n;i++)
    {
        for(h=0;h<n;h++)
            printf("%2d ",a[i][h]);
        printf("\n");
    }
}

在这里插入图片描述

#include<stdio.h>
#include<string.h>
int main()
{
	char a[6];
	int i=0;
	int n=0;
	int w=0;
	scanf("%s",a);
	for(i=0;i<5;i++){
		if(a[i]>='a'&&a[i]<='z'){
			a[i]-=32;
		}
	}
	for(i=0;i<5;i++){
		if(a[i]>='A'&&a[i]<='Z'){
			n++;
		}
		if(a[i]=='I'||a[i]=='O'){
			w++;
		}
		if(a[i]<'0'||(a[i]>'9'&&a[i]<'A')||a[i]>'Z'){
			w++;
		}
		if(a[4]<'0'||a[4]>'9'){
			w++;
		}
	}
	if(n>=2&&w==0){
		printf("yes:%s",a);
	}
	else printf("no.");		//注意"."
	return 0;
}

在这里插入图片描述

#include<stdio.h>
int main()
{
	int n,i,a[10],x[10];
	char c[100][100];	//二维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串。******
	scanf("%d\n",&n);
	
	for(i=0;i<n;i++){ 
		scanf("%s",&c[i]);
	}
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);	//a[i]表示行
	}
	for(i=0;i<n;i++){
		if(i<n){
		printf("%s ",c[(a[i])]);
		}
	}
	return 0;		
}
  • 11
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值