天梯赛训练:
A:
第一天收到一枚金币,第二三天收到两枚金币,,写两个循环,当天数满足题目要求即可退出循环
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int ans=0;
int n,step=0;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
ans+=i;
step++;
if(step==n){
break;
}
}
if(step==n)break;
}
cout<<ans;
return 0;
}
B:
简单循环遍历字符串即可;
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
int ans=0;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
string a;
cin>>a;
for(int i=0;i<8;i++){
if(a[i]=='1'){
ans++;
}
}
cout<<ans;
return 0;
}
C:
循环遍历,若有空格跳过计数就行
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
int ans=0;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
string s;
getline(cin,s);
int k=s.size();
for(int i=0;i<k;i++){
if(s[i]!=' '&&s[i]!='\n'){
ans++;
}
}
cout<<ans;
return 0;
}
D:
简单的比较大小
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
int ans=0;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int a,b,c;
cin>>a>>b>>c;
if(a*a>b*c)cout<<"Alice";
else cout<<"Bob";
return 0;
}
E:
定义一个数组大小为3的数组:
将后面的数加给数组中最小的那个,然后用sort排序,保证加给的是数组中的最小个数;
最后输出数组中最大的数即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
int ans=0;
int a[10004];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
}
int b[m];
for(int i=0;i<m;i++){
b[i]=a[i];
}
sort(b,b+m);
for(int i=m;i<n;i++){
b[0]+=a[i];
sort(b,b+m);
}
cout<<b[m-1];
return 0;
}
F:
将十进制数转换成二进制数,如果右边第一位是1,直接输出-1,若不是,从左到右输出1在的位置所对应的数字即可;
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
int ans=0,p[10000000],cnt=0;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n,f=0;
stack<int>s;
cin>>n;
int nn=n;
string a;
while(n!=1){
s.push(n%2);
n/=2;
}
s.push(n);
while(!s.empty()){
a+=to_string(s.top());
s.pop();
}
int k=a.size();
for(int i=0;i<a.size();i++){
int ans=0;
if(a[i]=='1'){
f=1;
p[cnt++]=(1<<k-1);
}
k--;
}
if(p[cnt-1]==1)cout<<"-1";
else {
for(int i=0;i<cnt;i++){
cout<<p[i]<<" ";
}
}
return 0;
}
G:
地雷问题:注意边界问题就行
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
int ans=0;
int dx[8]={1,1,1,0,0,-1,-1,-1};
int dy[8]={1,0,-1,1,-1,0,1,-1};
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>n>>m;
char a[n+5][m+5];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i][j]=='*'){
cout<<"*";
continue;
}
else{
for(int k=0;k<8;k++){
if(i+dx[k]>=0&&i+dx[k]<n&&j+dy[k]>=0&&j+dy[k]<m){
if(a[i+dx[k]][j+dy[k]]=='*'){
ans++;
}
}
}
}
cout<<ans;
ans=0;
}
cout<<endl;
}
return 0;
}
H:
p1是规定字母大小写,或者直接用*输出;,1是小写,2是大写,
p2是规定输出每个字符的个数;
p3是是否需要倒转输出,为2时是倒转;
先判断“-”旁白你的两个数满不满足题目的变换要求,即a[i+1]<=a[i-1];
若p3=2需要反转就用reverse即可不用另写条件
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int p1,p2,p3;
cin>>p1>>p2>>p3;
string a;
cin>>a;
auto check=[&](char a,char b){
if(a>=b)return 0;
if(a>='a'&&a<='z'&&b>='a'&&b<='z'||a>='0'&&a<='9'&&b>='0'&&b<='9')return 1;
else return 0;
};
for(int i=0;i<a.size();i++){
if(a[i]=='-'){
bool st=check(a[i-1],a[i+1]);
if(st){
vector<char>res;
for(int j=a[i-1]+1;j<a[i+1];j++){
for(int k=0;k<p2;k++){
if(p1==2){
if(j>='a'&&j<='z') res.push_back((char)j-'a'+'A');
else res.push_back((char)j);
}
else if(p1==1)res.push_back((char)j);
else res.push_back('*');
}
}
if(p3==2)reverse(res.begin(),res.end());
for(auto j:res)cout<<j;
}
else cout<<"-";//如果不满足要求直接输出
}
else cout<<a[i];//不需要变换的字符串一一输出
}
return 0;
}
I:格雷码
求n位格雷码的第k个码
找规律
就是一个前缀+(n-1)位格雷码的第?个码;
如果k<(2^(n-1))前缀就是0,?就是k;
否者前缀就是1,?就是2^(n-1)-1-(k-2^(n-1));
因为k在后半部分,把它移动到前半部分,
#include<bits/stdc++.h>
using namespace std;
unsigned long long k,bk;
int n;
bool flag;
int main(){
cin>>n>>k;
bk=pow(2,n-1);
while(bk){
if(!flag){
if(k < bk) cout<<"0";
else if(k >= bk) {
cout<<"1";
k -= bk;
flag = true;
}
}
else if(flag){
if(k < bk){
cout<<"1";
flag = false;
}
else if(k >= bk) {
cout<<"0";
k -= bk;
}
}
bk >>= 1;
}
return 0;
}