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;
}