一、概述
1、概念
模拟:就是按照题目给的操作,理清思路用代码依次描述出来即可
2、解题思路
基本上是送分题,所以大家只要有一定的代码基础就可以拿到满分,所以针对这一块,我们只需要多打打代码即可。
二、例题
1、金币
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n); //n为剩下的能增加金币的天数
int add=1; //最多连续n天每天给n个金币
int ans=0;
while(n>0){
if(n>=add){ //时间够多
n-=add;
ans+=add*add;
}else{ //时间不够多,金币增加天数为n
ans+=add*n;
n-=add;
}
add++; //金币数增加
}
printf("%d",ans);
return 0;
}
2、神奇的幻方
由题可知下一个点的位置取决于上的点的位置,依题意判断即可
https://blog.youkuaiyun.com/cggwz/article/details/77133268
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int num[n][n];
memset(num,0,sizeof(num));
num[0][n/2]=1;
int x=0,y=n/2;
//由题可知下一个点的位置取决于上的点的位置,依题意判断即可
for(int i=2;i<=n*n;i++){
if(x==0&&y!=n-1){
x=n-1;
y++;
}else if(x!=0&&y==n-1){
y=0;
x--;
}else if(x==0&&y==n-1){
x++;
}else if(num[x-1][y+1]==0){
x--;
y++;
}else{
x++;
}
num[x][y]=i;
}
//输出,注意多了空格或多了\n均会判错??
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d",num[i][j]);
if(j!=n-1){
printf(" ");
}
}
if(i!=n-1)
printf("\n");
}
return 0;
}
3、玩具谜题
https://blog.youkuaiyun.com/cggwz/article/details/77280534
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
scanf("%d%d",&n,&m);
int dirt[n];
char name[n][20];
for(int i=0;i<n;i++){
char x;
scanf("%d",&dirt[i]);
scanf("%c",&x); //1
scanf("%s",name[i]);
}
int cur=0; //2
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
if(a+dirt[cur]==1){ //判定下标要加还是减(画图)
cur+=b;
}else{
cur-=b;
}
if(cur<0){ //防止越界,也可用取余
cur+=n;
}else if(cur>=n){
cur-=n;
}
}
printf("%s",name[cur]);
return 0;
}
1处:这是为了把数字与名字之间的空格读入扔掉,为以后输出省了一点事(好像更麻烦了?无所谓,你自己抉择。)
2处:cur代表当前走到哪个小人