1.巴斯卡三角形
也就是有以下一些特点:把他看成一个正方形但只有右下部分。1.第一列全是1 2,对角线上全是1
3.对于其他位置 等于他的上一行对应列和上一行上一列的值相加。
也就是 dp[i][j]=dp[i-1][[j+dp[i-1][j-1]
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<queue>
using namespace std;
//巴斯卡三角形,假设就是给一个N作为规模
int main(){
int n,i,j;
scanf("%d",&n);
//n就是相应的规模
//应该是这个数组,上半部分全是空格,先初始化
//然后开始格式化
char Str[n-1][n-1];
// memset(Str,' ',sizeof(Str));
Str[0][0]='1';
for(i=1;i<n;i++)
for(j=1;j<=i;j++){
Str[i][0]='1';
if(i==j)
Str[i][j]='1';
else{
int a=Str[i-1][j]-'0'+Str[i-1][j-1]-'0';
Str[i][j]=a+'0';
}
}
//然后开始输出
for(i=0;i<n;i++)
for(j=0;j<=i;j++){
if(i==j){
printf("%c",Str[i][j]);
printf("\n");
}
else{
printf("%c",Str[i][j]);
}
}
}
三色旗问题:
使用到了数组指针,分成三类,分别是蓝色的指针,白色的指针,和红色的指针。
并且这些有三种情况,以白色的指针为主,当一个值是白色的时,则指针数加一,如果是蓝色的话,那就和蓝色的位置交换,并且将蓝色的位置和白色的位置都加一,最后如果是红色的话,因为红色的指针是在最后 所以是指针减一,并且白色位置加一,然后将对应位置换位。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<queue>
using namespace std;
//三色旗,主要就是指针的作用
//再写一个用来交换的
char Str[5]={'r','b','w','w','r'};
void swap(int x,int y){
//交换这个两个的位置
char temp=Str[x];
Str[x]=Str[y];
Str[y]=temp;
}
int main(){
//先创建一个数组用来当例子
int i;
int len=strlen(Str);
int flagB=0;
int flagW=0;
int flagR=len-1;
//开始计算
while(flagW<flagR){
if(Str[flagW]=='w')//如果是中间的白的,那就加一
flagW++;
if(Str[flagW]=='b'){
//如果是蓝的,那就换位再加加
swap(flagW,flagB);
flagB++;
flagW++;
}
if(Str[flagW]=='r'&&flagW<flagR){
//如果是红的,那就换位,然后对应的一个向后退一位,w不需要动
swap(flagW,flagR);
flagR--;
}
}
//开始输出
for(i=0;i<len;i++)
printf("%c",Str[i]);
}
老鼠走迷宫(-)
应该是直接使用dfs,来判断是否有路
和本题无关,但是就是一个dfs的算法,会有一个判断函数,用来判断这个点能不能用,然后有两个数组来指示前后左右,最后就是dfs(map,x,y)判断前后左右是否可以,直到走到对应的位置,return true
骑士走键盘
这道题的核心递归思想参数有x的起点,y的起点,总共走了几步
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<queue>
using namespace std;
//首先是一个八乘八的数组,表示这个地图
int map[8][8];
int Stepx[8]={-2, -1, 1, 2, 2, 1, -1, -2};
int Stepy[8]={1, 2, 2, 1, -1, -2, -2, -1};//这代表能走的方向
int i;
//然后开始写深度遍历
bool DFS(int starx,int stary,int index){
//首先判断这个位置是不是64,也就是走到头了,如果是,那就说明正确,如果不是那就说明还得进行
map[starx][stary]=index;
if(index==64)
return true;
//开始分别判断其他位置
for(int i=0;i<8;i++){
int newx=starx+Stepx[i];
int newy=stary+Stepy[i];
//开始判断这个位置合不合理
if(newx>=0&&newx<8&&newy>=0&&newy<8&&map[newx][newy]==0){//没过界,并且可以访问
DFS(newx,newy,index+1);
}
}
map[starx][stary]=0;
return false;
}
int main(){
//对map初始化
memset(map,0,sizeof(map));
if(DFS(0,0,1))
printf("YES");
else
printf("No");
}