数字统计

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("tj.in","r",stdin);
	freopen("tj.out","w",stdout);
	int n,m,sum=0,k=0;
	cin>>n>>m;
	for(int i=n;i<=m;i++){
		k=i;
		while(k>=10){
			if(k%10==2){
				sum++;
			}
			k/=10;
		}
		if(k==2){
			sum++;
		}
	}
	cout<<sum;
	return 0;
}

思路:n和m判断范围,for循环寻找2,把数拆开来判断。

寻宝

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=10010,M=110,MOD=20123;
bool st[N][M];
int x[N][M];
int main(){
	freopen("treasure.in","r",stdin);
	freopen("treasure.out","w",stdout);
	int n,m,k;
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for (int j=0;j<m;j++){
			int key,val;
			cin>>key>>val;
			if(key){
				st[i][j]=1;
			}
			x[i][j]=val;
		}		
	}
	cin>>k;
	int res=0;
	for (int i=0;i<n;i++){
		int s=0;
		for(int j=0;j<m;j++){
			if(st[i][j]){
				s++;
			}
		}
		int t=x[i][k];
		res+=t%MOD;
		t%=s;
		if(!t){
			t=s;
		}
		for(int j=k;;j=(j+1)%m){
			if(st[i][j]){
				t--;
				if(t== 0){
					k=j;
					break;
				}
			}
		}
	}
	cout<<res%MOD;
	return 0;
}

思路:bool类型判断第n层m房是否有梯子,int x是第n层m房的指示牌,k是第一层房间的起始编号,两个for循环存储输入数据,res存结果,两个for循环,s来存储dangqian楼层楼梯总数t是当前房间的指示牌编号。接下来的一个for循环是找第k个房间开始找第t个楼梯,找到后记录编号。

计数问题

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,x,sum=0,k=0;
	cin>>n>>x;
	for(int i=1;i<=n;i++){
		k=i;
		while(k>=10){
			if(k%10==x){
				sum++;
			}
			k/=10;
		}
		if(k==x){
			sum++;
		}
	}
	cout<<sum;
	return 0;
}

思路:for循环遍历1-n,把每一个数字都拆开判断判断拆开后的数字是否和x一致。

珠心算测验

代码:

#include<bits/stdc++.h>
using namespace std;
int n,st[100001],a[10001],ans=0;
int main(){
	freopen("count.in","r",stdin);
	freopen("count.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a,a+n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i!=j){
				int sum=a[i]+a[j];
				st[sum]=1;
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(st[a[i]]==1){
			ans++;
		}
	}
	cout<<ans;
	return 0;
}

思路:输入数据后,sort先排序,两个for循环遍历每一种两个数的组合,如果确保两个数字不是一个数之后,sum存储两数之和,st用来桶排序,如果桶里面有数据,那么结果加一。

金币

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int sum=0,n,m=1,w=0;
	cin>>n;
	for(int i=1;i<=m;i++){
		if(w==n){
			break;
		}
		w++;
		sum+=m;
		if(m<=i){
			m++;
			i=0;
		}
		
	}
	cout<<sum;
	return 0;
}

思路:w用来判断天数,sum用来求金币总和,m来判断金币倍数。第二个判断当天数足够时,m++,i归0,重新计算。

扫雷游戏

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,b[1010][1010];
char a[1010][1010];
int main(){
	freopen("boom.in","r",stdin);
	freopen("boom.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='*'){
			b[i-1][j-1]++;
			b[i-1][j]++;
			b[i-1][j+1]++;
			b[i][j-1]++;
			b[i][j+1]++;
			b[i+1][j-1]++;
			b[i+1][j]++;
			b[i+1][j+1]++;				
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='*'){
				cout<<a[i][j];
			}else{
				cout<<b[i][j];
			}
		}
		cout<<endl;
	}
	return 0;
}

思路:分三个阶段,每个阶段都用两个双重for循环,第一个输入1数据,第二个判断,判断条件是,如果a[i][j]的位置是炸弹,那么向他周围的八个方向都加一,第三个循环是输出数据。

买铅笔

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,a,b,sum=1e9,minn=1e9,x=0;
	cin>>n;
	x=n;
	for(int i=0;i<3;i++){
		cin>>a>>b;
		if(x%a==0){
			minn=x/a*b;
		}else{
			minn=(x/a+1)*b;
		}
		if(sum>minn){
			sum=minn;
		}
	}
	cout<<sum;
	return 0;
}

思路:一个for循环判断需要买多少包的铅笔,sum存最终答案。

回文日期

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int y[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int n,m,cnt=0;
	cin>>n>>m;
	if(n<=92200229&&m>=92200229){
		cnt++;
	}
	for(int i=1;i<=12;i++){
		for(int j=1;j<=y[i];j++){
			int a=(j%10)*1000+(j/10)*100+(i%10)*10+i/10;
			if(a<(n/10000)||a>(m/10000)){
				continue;
			}
			cnt++;
		}
	}
	cout<<cnt;
	return 0;
}

思路:y存储12个月份,92200229这个数很特殊,因为他是唯一一个需要单独判断的数,cnt存储最终答案。双重for循环第一个for循环月份,第二个for循环天数,a模拟每一个月份和天数,if判断是判断a有没有出界。

数字游戏

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	char a[10];
	int b[10],sum=0;
	for(int i=0;i<8;i++){
		cin>>a[i];
		b[i]=a[i]-'0';
		if(b[i]==1){
			sum++;
		}
	}
	cout<<sum;
	return 0;
}

思路:char存储数据,int类型的数组b存储转换后的数据,如果数组b[i]为一sum加一,最后输出sum。