PAT刷题D1 | B1036,B1022 ,B1009

文章讲述了在PAT刷题中的三个问题:图形输出题B1036,进制转换题B1022,以及字符串处理题B1009。作者分享了解题思路和两种不同的代码实现,强调了在解决简单问题时仍需仔细阅读题解以提升自我能力。
摘要由CSDN通过智能技术生成

1036 跟奥巴马一起编程

思路:
就是一个图形输出题,读懂题目理清思路基本上就可以oc
代码:

//一开始写的是这样,后来没写完觉得不对,去看了题解
#include<iostream>
using namespace std;
int main(){
    int n;
    char c;
    scanf("%d%c", n,c);
    const num=n;
    if(n%2==0){
        char res[num][num/2];
        for(int i=0;i<num;i++){
            for(int j=0;j<num/2;j++){
                if(i==0||i==num-1) res[i][j]=c;
                else if(j==0||j==num/2-1) res[i][j]=c;
            }
        }
    }
    else{
        char res[num][num/2+1];
        for(int i=0;i<num;i++){
            for(int j=0;j<num/2+1;j++){
                if(i==0||i==num-1) res[i][j]=c;
                else if(j==0||j==num/2) res[i][j]=c;
            }
        }
    }
    for(int i=0;i<num;i++){
            for(int j=0;j<num/2+1;j++){
                if(i==0||i==num-1) res[i][j]=c;
                else if(j==0||j==num/2) res[i][j]=c;
    
    return 0;
}

//后来换了一种写法
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int row,col;
    char c;
    scanf("%d %c",&col,&c);
    if(col%2==0) row=col/2;
    else row=col/2+1;
    // printf("%c",c);
    for(int i=0;i<row;i++){
        for(int j=0;j<col;j++){
            if(i==0||i==row-1) printf("%c",c);
            else if(j==0||j==col-1) printf("%c",c);
            else printf(" ");
        }
        printf("\n");
    }
    return 0;
}

1022 D进制的A+B

思路:
进制转换题,注意进制转换的两个模板(参考算法笔记pdf104)

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int a,b,d;
    scanf("%d%d%d",&a,&b,&d);
    // printf("%d",a);
    int sum=a+b;
    int z[40],num=0;
    do{
        z[num++]=sum%d;
        sum/=d;
    }while(sum!=0);
    //这里弱智一开始写了++,一直报错,注意注意
    for(int i=num-1;i>=0;i--){
        printf("%d",z[i]);
    }
    return 0;
}

1009 说反话

思路:
字符串输入输出,感觉应该好好的看看字符串相关的几个函数。这里主要是看了别人的题解做的。主要是用二维数组来存储单词。

代码:

#include <stdio.h>
int main()
{
	char a[80][80];//定义二维数组,后面会一行存储一个单词
	int i = 0;
	do {
		scanf("%s", a[i++]);//scanf("%s")遇到空白符(空格,tab,\n)会停止接收,并且空格留在输入缓存区中
	} while (getchar()!='\n');//getchar()用于接收空格,当它接收到换行符时说明字符串输入结束,故终止循环
	while (--i)//当前a[i]在最后一个单词所在行的后面一行,是一个空白行,所以需要先自减,再使用i打印最后一个单词,然后依次往前
	{
		printf("%s ",a[i]);
	}
	printf("%s", a[i]);//当i为0时(a[0]为第一个单词所在行)上述循环结束,并没有打印第一个单词,所以在这里打印
	return 0;
}

//另一种用string实现的思路
#include <iostream>
#include <string>
#include <vector>
#include <sstream> // for istringstream

using namespace std;

int main() {
    string input;
    getline(cin, input); // 读取整行输入

    vector<string> words;
    istringstream iss(input); // 用于分割单词的字符串流

    // 从输入中提取每个单词,并将其存储在向量中
    string word;
    while (iss >> word) {
        words.push_back(word);
    }

    // 倒序输出单词
    for (int i = words.size() - 1; i >= 0; --i) {
        cout << words[i];
        if (i > 0) {
            cout << " "; // 在单词之间加空格
        }
    }

    return 0;
}

感想总结

这几题都还算比较简单的,但是还是看了题解,二刷争取不看题解刷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值