【PTA-乙级】1009-说反话 (三种解法)

2023-10-17 22:30

本文主要是介绍【PTA-乙级】1009-说反话 (三种解法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言: 更新: 之前的前言是我说我写的第一种解法测试点3过不去,经过若干天后我重新看这个题。仍然觉得没问题 然后把字符数组的大小改为82就过了测试点3。 鬼知道什么情况。应该是输入的测试用例不规范吧

题目:

解法1  char型数组与string数组赋值解法:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{char arr[82] = {0};int i = 0;while ((arr[i] = getchar()) != '\n')i++;// 用来存放每一个单词string brr[40];char* p = arr;int a = 0;// 调整字符串for (int j = 0; j < 81; j++){if (arr[j] == ' ' || arr[j] == '\n')arr[j] = '\0';}// 正序存放单词while (*p != '\0'){brr[a] = p;while (*p != '\0')p++;p++;a++;}//  逆序打印单词for (int i = a - 1; i >= 0; i--){cout << brr[i];if (i == 0)break;cout << " ";}
}

注:1.  如果把这个代码整体调试一遍   会让你对字符数组,string类型对象,缓冲区等有更深的理解 (对于我来说) 建议调试一遍

2.  如果把一个字符数组里面的内容存放在一个string类型的对象中   空格不会作为终止符  只有'\0'才会终止  如下图  这也是为什么存放单词之前要对字符串调整 让每个单词成功存入string数组中

解法2  :string数组解法(最简单的解法)

#include<iostream>
using namespace std;
#include<cstring>
int main()
{//string c;//cin >> c;    //输入时 空格 \n都会称为终止输入的标志//Hello' 'World' 'Here' 'I' 'Come'\n'string arr[80];int a = 0;char c;while (1){cin >> arr[a];a++;c = getchar();if (c == '\n')break;}for (int i = a - 1; i >= 0; i--){cout << arr[i];if (i == 0)break;cout << " ";}return 0;
}

注:  在输入string类型对象时   ' '  和  ‘\n' 都会作为输入终止的标志 所以在循环输入时  完全可以放心可以把正确的单词输入进string型数组中  最后把'\n'作为循环终止的标志  退出循环即可

解法3 :char型二维数组解法

#include<iostream>
using namespace std;
#include<cstring>// 1009说反话 解法3:
int main()
{char arr[81][81];char c;int length = 0;int i = 0;//Hello ' ' World ' ' Here ' ' I ' ' Come '\n'while ((c = getchar()) != '\n'){if (c != ' '){arr[length][i] = c;i++;}else{arr[length][i] = '\0';length++;i = 0;}}arr[length][i] = '\0';for (int i = length; i >= 0; i--){cout << arr[i];if (i == 0)break;cout << " ";}return 0;
}

这个解法是  创建char型二维数组 把每个单词放置一行中  由于打印时会因'\0'终止 所以逆序打印出结果即可  

总结:  如果可以把三种解法都调试一遍 会对数据的存入与读取有更深的理解;(别忘了解法1的测试点3过不去)

这篇关于【PTA-乙级】1009-说反话 (三种解法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228374

相关文章

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

结构化开发方法的三种基本控制结构

结构化开发方法概述 什么是结构化开发方法? 结构化开发方法是一种程序设计和系统开发的理念,旨在通过使用清晰、可预测的控制结构来提高程序的可读性、可维护性和可靠性。该方法强调使用标准化的编程结构,以减少程序中的错误并提高代码的逻辑清晰度。 结构化编程的历史背景 结构化编程(Structured Programming)这一概念最早由计算机科学家艾兹赫尔·戴克斯特拉(Edsger W. Dij

2015多校联合训练第一场Assignment(hdu5289)三种解法

题目大意:给出一个数列,问其中存在多少连续子序列,子序列的最大值-最小值< k 这题有三种解法: 1:单调队列,时间复杂度O(n) 2:RMQ+二分,时间复杂度O(nlogn) 3:RMQ+贪心,时间复杂度O(nlogn) 一:RMQ+二分 RMQ维护最大值,最小值,枚举左端点i,二分找出最远的符合的右端点j,答案就是ans += j - i+1;(手推一下就知道) 比如1 2 3

selenium的webdriver三种等待方式(显式等待WebDriverWait+implicitly_wait隐式等待+sleep强制等待)

隐式等待是等页面加载,不是等元素!!! 1、显式等待  一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码。显式等待是等元素加载!!! from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import

c语言(三种语言对比、数据类型及输出、变量存储、内存分配)

数据类型: 变量的输出: c语言不能直接打印数字,字符,只能将他们转化成字符串打印, printf("%d\n", num); %d 是整数占位符,将来由逗号右边的变量的值占据这个位置。(%i和%d是一样的) %f 是浮点数占位符,默认输出小数点后6位,若只想输出小数点后两位:%.2f %c 是字符型数据占位符。

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

常见的交换变量的三种方法

常见的交换变量的三种方法     在项目中,两个变量之间交换位置在常见不过了,如进行排序。     下面说下常见的三中变量交换模式。 1、定义中间变量 #include <stdio.h>int main(){int a=9, b=3; //方法一://交换两个变量值的常规做法int tmp=a;a=b;b=tmp;printf("a=%d b=%d\n",a,b);

Java获取小程序码示例(三种小程序码)

首先我们可以看到官方文档上是有三种码的 获取小程序码 这里特别要注意的是第一种和第三种是有数量限制的,所以大家生成的时候记得保存,也不要一直瞎生成 还有一点要注意的是第一种和第二种是太阳码 第三种是方形码 好了直接上代码 这里要注意,它请求成功返回的是一个 base64 的图片流,但是失败返回的是JSON字符串,我这里没有处理请求失败的问题 package com.sakur