1
题目描述
求最小数
每次给定3个数(均用int表示),要求找出3个数里的最小的一个,并输出最小的数
输入
a b c 三个数用空格隔开
输出
a b c 中最小的一个数
输入样例
5 3 98
输出
3
参考代码
#include <cstdio>
int main(){
int a, b, c;
int min;
scanf("%d%d%d",&a, &b, &c);
min=(a>b?b:a);
min=(min>c?c:min);
printf("%d\n", min);
}
2
题目描述
将一个10进制的数转换为二进制数
输入
输入一个10000位以内的十进制数
输出
转换为二进制后输出
输入样例
1030
输出
10000000110
参考代码
算法思想:除基取余
基为要转换成的进制Q,本题中Q=2。
每次将待转换数除以Q,然后取余数存起来,商继续除以Q并重复上述操作,最后商为0即可结束
将存起来的余数按从高到低输出即可得到Q进制数
#include <cstdio>
int main(){
int r[40], num = 0; //数组r存放二进制数y的每一位,num为存储的位数
int y; //十进制数
scanf("%d", &y);
do
{
r[num++] = y % 2; //转换为8进制将2换成8即可,以此类推
y = y / 2;
}while(y != 0);
for(int i = num - 1; i >= 0; i--)
printf("%d", r[i]);
printf("\n");
}
3
题目描述
有一个迷宫,迷宫里有一个人,迷宫是N*N的方格,人处于某一位置,可以选择向上下左右前进,但是要保证面对的不是墙壁,否则无法向前行走
输入
迷宫的规格,是一个正整数N(2<=N<=20)表示,占一行;输入一堆数据m,n(第m行,第n列),表示人所在的位置坐标,以空格隔开,占一行;输入要尝试前进的方向
”w“”s“”a“”d“分别代表上、下、左、右,占一行
输出
”Y“
表示可以向该方向前进;最后一行输出回车
”N“
表示可以向该方向前进;最后一行输出回车
输入样例
4
0 3
s
输出
Y
参考代码
//switch case判断边界
#include <cstdio>
int main(){
int size; //规格
scanf("%d", &size);
int m, n; //坐标
scanf("%d%d", &m, &n);
getchar();
char d; //前进方向
scanf("%c", &d);
switch(d)
{
case 'w':
if(m == 0)
printf("N\n");
else
printf("Y\n");
break;
case 's':
if(m == size-1)
printf("N\n");
else
printf("Y\n");
break;
case 'a':
if(n == 0)
printf("N\n");
else
printf("Y\n");
break;
case 'd':
if(n == size-1)
printf("N\n");
else
printf("Y\n");
break;
}
return 0;
}
4
题目描述
又一个迷宫
有一个迷宫,迷宫里有个人,迷宫的规格是N*N的方格,房内特定位置上有障碍物,人处于某一位置,可以选择上下左右方向前进,但是要保证面对的不是墙壁或障碍物,否则无法向前走
输入
迷宫的规格,一个正整数N(2<=N<=100),占一行,代表矩阵的大小;输入方形矩阵的N行N列,由0和1组成,其中0代表空地,1代表障碍物;输入一对数据m,n(第m行,第n列),表示人所在的位置坐标(保证人所在的位置为0,即空地),以空格隔开,占一行;输入一个整数表示要前进的方向,0,1,2,3分别代表左、下、右、上。
输出
”Y“
表示可以向该方向前进
”N“
表示可以向该方向前进
输出占一行
输入样例
4
1 0 0 0
1 1 1 0
0 0 1 0
1 0 0 1
0 3
1
输出
Y
参考代码
//
// 由题意,m行n列起始地址都为0,在所处位置想要前进,必须要判断前进方向的障碍物是否为0,以及是否为边界
// 0向左前进,那么m不变,n-1列务必为0
// 1向下前进,那么m+1行务必为0,n行不变
// 2向右前进,那么m行不变,n+1列为0
// 3向上前进,那么m-1行务必为0,n行不变
#include <cstdio>
int main(){
int size; //迷宫规格
scanf("%d", &size);
int obstacle[size][size]; //障碍物矩阵
int m, n; //人所处位置图标
int direction; //前进方向
/*下面循环将障碍物的矩阵输入保存*/
for(int i = 0; i < size; i++)
for(int j = 0; j < size; j++)
scanf("%d", &obstacle[i][j]);
scanf("%d%d", &m, &n);
/*判断输入的坐标所在位置是否为空地,若是输出错误信息*/
if(obstacle[m][n] != 0){
printf("输入位置存在障碍物!\n");
return 0;
}
scanf("%d", &direction);
switch(direction)
{
case 0:
if(n == 0 || obstacle[m][n-1] != 0)
printf("N\n");
else
printf("Y\n");
break;
case 1:
if(m == size-1 || obstacle[m+1][n] != 0)
printf("N\n");
else
printf("Y\n");
break;
case 2:
if(n == size-1 || obstacle[m][n+1] != 0)
printf("N\n");
else
printf("Y\n");
break;
case 3:
if(m == 0 || obstacle[m-1][n] != 0)
printf("N\n");
else
printf("Y\n");
break;
}
return 0;
}
5
题目描述
字符串替换
输入三个字符串a,b,和c,将a中b的第一次出现替换为c
输入
输入三行,每行一个字符串,字符串长度不超过255;
输出
如果b有出现在a中,输出替换后的字符串,否则输出原串a。
输入样例
abcdefgh
cde
Xiaolan
输出
abXiaolanfgh
提示:所有字符串只包含英文字母
参考代码
// 思路:使用标准模板库STL的的string常用函数解决较为方便
// find()函数在字符串a中找出b第一次出现的位置,length()函数可得到b的字符串长度,replace根据前面所得位置即可替换为c
#include <iostream>
#include <string>
using namespace std;
int main(){
string a, b, c;
cin>>a;
cin>>b;
cin>>c;
int m, n; //分别表示b在a中第一次出现的位置和b的长度
n = b.length();
if(a.find(b) != string::npos)
m = a.find(b);
else{
cout<<a<<endl;
return 0;
}
cout<<a.replace(m, m+n-2, c)<<endl;
return 0;
}
6
六码数问题
有点复杂,参考了他人的程序也觉得特别复杂,机试应该没有这么多时间折腾这个
7
已放弃
8
题目描述
给一行句子,写一个程序判断它有几个单词。
输入
输入占一行,行尾有空格,并且只含有大写字母和小写字母和空格
输出
单词的个数。
例如:
printf(" %d\n" ), num;
输入样例
General game players are systems able to
输出
7
参考代码
#include <cstdio>
#include <cstring>
const int maxn = 256;
int main(){
int num = 1;
char str[maxn];
gets(str);
for(int i = 1; i < strlen(str);i++)
/*当前位置为空格,前一位置不为空格单词数+1*/
if(str[i] == ' ' && str[i-1] != ' ')
num++;
printf("%d\n", num);
}
9
题目描述
因为连续的降雨,我们学校操场上出现了许多水坑,现在需要统计一共有 多少个水坑。
题目输入为一个N*M(1<=N<=100;1<=M<=100)的图,(‘W’ )代表积水, (’.’)代表干燥。
一处积水我们认为和它周围的八个方向相邻,
相邻的积水构成一个水坑。
需要输出一个数字,表示一共有多少个互不相邻的水坑。
输入
第一行:两个正整数n和m。
第二行到第n+1行:输入操场信息,每一点的状态只可能是’W’或者’.’
输出
输出一个正整数,表示不相邻的水坑的数目。
输入样例
(为观察方便,“.”显示为"。",输入时输入英文句号“.”)
10 12
W。。。。。。。。WW。
。WWW。。。。。WWW
。。。。WW。。。WW。
。。。。。。。。。WW。
。。。。。。。。。W。。
。。W。。。。。。W。。
。W。W。。。。。WW。
W。W。W。。。。。W。
。W。W。。。。。。W。
。。W。。。。。。。W。
输出
3
参考代码
#include <stdio.h>
#include <iostream>
using namespace std;
char map[100][100];//全局变量,表示一个二维字符矩阵
int visited[100][100];//全局变量,为0表示未访问过,1表示访问过
int ans=0;//全局变量,表示当前互不相邻水坑个数
int m,n;//全局变量,m和n
struct{//全局变量,结构体数组,表示八个方位的偏移量
int x;
int y;
}offset[8]={
{-1,-1},
{-1,0},
{-1,1},
{0,-1},
{0,1},
{1,-1},
{1,0},
{1,1}
};
void dfs(int i,int j)//深搜函数,表示对map[i][j]进行考察
{
int x,y,u;//x和y用于暂时保存i和j改变之后的值,以免破坏原有i和j的值,u是循环变量
visited[i][j]=1;//进来就访问,因此置1
for(u=0;u<8;u++)//八个方向遍历
{
x=i+offset[u].x;//x改变
y=j+offset[u].y;//y改变
if(x>=0&&x<m&&y>=0&&y<n)//判断!这里是不允许越界的!
{
if(map[x][y]=='W'&&visited[x][y]==0)//只要找到一个未访问过的W,就基于该点考察!
dfs(x,y);
}
}
}
int main()
{
int i,j;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
visited[i][j]=0;
getchar();//吸收上面的回车啦
for(i=0;i<m-1;i++)//输入字符矩阵需要有技巧的哦!
{
for(j=0;j<n;j++)
scanf("%c",&map[i][j]);
getchar();
}
for(j=0;j<n;j++)
scanf("%c",&map[m-1][j]);
for(i=0;i<m;i++)//每个点都要遍历到
for(j=0;j<n;j++)
{
if(map[i][j]=='W'&&visited[i][j]==0)//如果是未访问过的W,就要深搜,
{
dfs(i,j);
ans++;//能执行到这里,说明上次深搜已经结束,已经找到全部的相邻的W了,即完成了一个水坑的查找
}
}
printf("%d\n",ans);
return 0;
}
转载自西工大:连阴雨问题