PAT刷题D1 | B1036,B1022 ,B1009
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;
}
感想总结
这几题都还算比较简单的,但是还是看了题解,二刷争取不看题解刷。