数字统计
代码:
#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。