A 旗鼓相当的对手

题解:考察枚举,需要比较每两个人的第一次和第二次排名,若满足条件,则需要统计一次。

参考代码:

#include <bits/stdc++.h>
using namespace std;
int main() {
    int a1,b1,c1,d1,a2,b2,c2,d2,cnt=0;
    cin>>a1>>b1>>c1>>d1;
    cin>>a2>>b2>>c2>>d2;
    //第一场胜第二场负 或 第一场负第二场胜 
    //A与B比较 
    if(a1<b1&&a2>b2||a1>b1&&a2<b2){
        cnt++;
    }
    //A与C比较 
    if(a1<c1&&a2>c2||a1>c1&&a2<c2){
        cnt++;
    }
    //A与D比较 
    if(a1<d1&&a2>d2||a1>d1&&a2<d2){
        cnt++;
    }
    //B与C比较
    if(b1<c1&&b2>c2||b1>c1&&b2<c2){
        cnt++;
    }
    //B与D比较
    if(b1<d1&&b2>d2||b1>d1&&b2<d2){
        cnt++;
    }
    //C与D比较
    if(c1<d1&&c2>d2||c1>d1&&c2<d2){
        cnt++;
    }
    cout<<cnt;
    return 0;
}

B 图像变换

题解:考察循环嵌套,对于每一个行需要扩大k倍,对于每一个列需要扩大k倍,可以进行四重循环来进行输出。

参考代码:

#include<bits/stdc++.h>
using namespace std;
char c[101][101];
int main() {
    int n,m,k;
    cin>>n>>m>>k;
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            cin>>c[i][j];
        }
    }
    for(int i=1; i<=n; i++) {
        for(int a=1; a<=k; a++) { //每行扩大k倍
            for(int j=1; j<=m; j++) {
                for(int b=1;b<=k;b++){ //每列扩大k倍 
                    cout<<c[i][j];
                } 
            }
            cout<<endl;
        }
    }
    return 0;
}

C 系动词

题解:考察字符串的使用,对于每个单词可以存储在字符串数组中,同时统计单词的个数,进行循环遍历每个单词。判断是am或者is、are的前一个单词是什么,紧接着输出与其匹配的单词。

参考代码:

#include<bits/stdc++.h>
using namespace std;
string s,t,word[101];
int cnt;
string pd(string pre){
    if(pre=="i")return "am";
    else if(pre=="you")return "are";
    else if(pre!="i"||pre!="you") return  "is";
}
int main(){
    getline(cin,s);
    for(int i=0;i<s.size();i++){
        if(s[i]!=' '){
            t+=s[i];
        }else{
            word[++cnt]=t;
            t="";
        }
    }
    word[++cnt]=t;
    for(int i=1;i<=cnt;i++){
        if(word[i]=="am"||word[i]=="is"||word[i]=="are")
            cout<<pd(word[i-1]);
        else cout<<word[i];
        cout<<' ';
    }
    return 0;
}

D 照明

题解:考察二维数组,对于是灯的位置进行上下左右进行延申判断,若是空地则进行标记,若遇到墙的位置则推出,最后将标记的位置个数进行统计,然后输出。

方法1:

#include<bits/stdc++.h>
using namespace std;
int n,ans;
char a[33][33];
bool vis[33][33];
void up(int x,int y){
    for(int i=x-1;i>=1;i--)
        if(a[i][y]=='.')vis[i][y]=1;
        else break;
}
void down(int x,int y){
    for(int i=x+1;i<=n;i++)
        if(a[i][y]=='.')vis[i][y]=1;
        else break;
}
void left(int x,int y){
    for(int j=y-1;j>=1;j--)
        if(a[x][j]=='.')vis[x][j]=1;
        else break;
}
void right(int x,int y){
    for(int j=y+1;j<=n;j++)
        if(a[x][j]=='.')vis[x][j]=1;
        else break;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>a[i][j];
            if(a[i][j]=='*') vis[i][j]=1;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(a[i][j]=='*'){
                up(i,j);
                down(i,j);
                left(i,j);
                right(i,j);
            }
        }
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(vis[i][j])ans++;
    cout<<ans;
    return 0;
}

方法2:

#include <bits/stdc++.h>
using namespace std;
char a[35][35];
int main() {
    int n,cnt=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(a[i][j]=='*'){
                //使用新的行、列变量,不能使用循环变量i,j 
                int ni=i,nj=j;  
                //上
                while(ni-1>=1&&a[ni-1][j]!='#'){
                    ni--;
                    if(a[ni][j]=='.')
                        a[ni][j]='o';
                } 
                //下
                ni=i; //必须重新赋值,因为在上个循环里值已经改变 
                while(ni+1<=n&&a[ni+1][j]!='#'){
                    ni++;
                    if(a[ni][j]=='.')
                        a[ni][j]='o';
                }  
                //左 
                while(nj-1>=1&&a[i][nj-1]!='#'){
                    nj--;
                    if(a[i][nj]=='.')
                        a[i][nj]='o';
                } 
                //右 
                nj=j; 
                while(nj+1<=n&&a[i][nj+1]!='#'){
                    nj++;
                    if(a[i][nj]=='.')
                        a[i][nj]='o';
                }   
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(a[i][j]=='o'||a[i][j]=='*'){
                cnt++;
            }
        }
    }
    cout<<cnt;
    return 0;
}
Copyright ©图灵之星 2024,转载需注明出处该文件修订时间: 2024-12-21 23:00:10

results matching ""

    No results matching ""