C18.【C++ Cont】OJ测试用例的各种输入情况汇总

目录

1.思维导图

2.单组测试用例

3.多组测试用例

1.测试数据组已知(输入)类

模版

例题

2.测试数据组未知

模版

3.特殊值结束测试数据

模版

1.逐个字符处理

2.一次读一行

例题

4.应对空格的处理方法

1.一次读一行

模板

2.一次读一个单词

5.应对数字的处理方法

两个认知

1.呈现在控制台上的内容(输入或输出)是由单个的字符组成的

2.如何解析这些字符取决于依赖编译器对变量类型的识别

例题

方法1:按字符串处理

提交结果

方法2:按整数处理

提交结果

结论


1.思维导图

2.单组测试用例

如:明确给出单组要输入多少个数,程序运行一次只处理一组数据,之后直接打印结果,程序结束

3.多组测试用例

1.测试数据组已知(输入)类

如:先输入组数n,再输入n组数据,因此程序运行一次会处理多组数据

模版

cpp 复制代码
cin>>n
while (n--)//n次询问
{
    //do_something
}

注:n次询问参见C9.【C++ Cont】n次询问、向上取整和向下取整

例题

B2064 斐波那契数列

题目描述

斐波那契数列是指这样的数列:数列的第一个和第二个数都为 1,接下来每个数都等于前面 2 个数之和。

给出一个正整数 a,要求斐波那契数列中第 a 个数是多少。

输入格式

第 1 行是测试数据的组数 n,后面跟着 n 行输入。每组测试数据占 1 行,包括一个正整数 a(1≤a≤30)。

输出格式

输出有 n 行,每行输出对应一个输入。输出应是一个正整数,为斐波那契数列中第 a 个数的大小。

输入输出样例

输入 #1

复制代码
4
5
2
19
1

输出 #1

复制代码
5
1
4181
1

两个方法:1.每给一个a算一次第a个斐波那契数 2.打表,查找第a个斐波那契数

显然第二个方法只算一次,运行速度快!

打表,让arr[a]直接对应第a个斐波那契数,因此arr[0]要弃置不用,因此arr至少能容纳31个数

代码

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
	int a,n;
	int arr[31];
	//打表 
	arr[1]=1;
	arr[2]=1;
	for (int i=3;i<31;i++)
	{
		arr[i]=arr[i-1]+arr[i-2];
	}
	
	cin>>n; 
	//n次询问 
	while (n--)
	{
		cin>>a;
		cout<<arr[a]<<endl; 
	}

	return 0;
}

提交结果

2.测试数据组未知

如:输入包含多组数据(并没有告诉一共多少组),每组数据输入一行,包含......

模版

cpp 复制代码
//写法1
while(cin>>a)
{
    //do_something
}

//写法2
while (scanf("%d",&a) != EOF)
{
    //do_something
}

//写法3
while ((ch = getchar()) != EOF)
{
    //do_something
}

//写法4
while(getline())//getline的返回值类型为istream&,不能和EOF比较
{
    //do_something
}

写法1具体参见C17.【C++ Cont】遍历字符串的两种方式以及按单词去读取字符串文章

3.特殊值结束测试数据

如:输入一串字符,以某个字符结束,要求......

模版

1.逐个字符处理

输入一串字符,以"?"结束

cpp 复制代码
	char ch;
    while((ch=getchar())!='?')
	{
        //do_something
	} 
2.一次读一行
cpp 复制代码
    string s;
    getline(cin,s);
    //do_something

例题

字符统计

链接:登录---专业IT笔试面试备考平台_牛客网

来源:牛客网

题目描述

输入一串字符,以"?"结束。统计其中字母个数,数字个数,其它符号个数。

输入描述:

复制代码
输入一行,包含若干个字符,以”?”结尾。

输出描述:

复制代码
输出三行,每行包含一个整数,依次为字母个数,数字个数,其他符号个数。

示例1

输入

ab123!?

复制代码
ab123!?

输出

Letters=2 Digits=3 Others=1

复制代码
Letters=2
Digits=3
Others=1

备注:

复制代码
空格也可能是一个字符
cpp 复制代码
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
	string s;
	int Letters=0;
	int Digits=0;
	int Others=0;

	getline(cin,s);//不能用cin>>s,可能有空格!!!
	s.pop_back();//尾部删除?字符
	
	for (auto a:s) 
	{
		if (isalpha(a))
			Letters++;
		else if (isdigit(a))
			Digits++;
		else
			Others++;
	} 
	cout<<"Letters="<<Letters<<endl;
	cout<<"Digits="<<Digits<<endl;
	cout<<"Others="<<Others;
	return 0;
}

提交结果

4.应对空格的处理方法

1.一次读一行

模板

cpp 复制代码
string s;
getline(cin,s);

2.一次读一个单词

参见C17.【C++ Cont】遍历字符串的两种方式以及按单词去读取字符串文章

5.应对数字的处理方法

两个认知

1.呈现在控制台上的内容(输入或输出)是由单个的字符组成的

如下图输入123456,在屏幕上呈现的是由单个字符1,2,3,4,5,6组成的数字

2.如何解析这些字符取决于依赖编译器对变量类型的识别

根据类型再将读取字符串数据转化成对应类型的数据:123456可以被解析为字符串(string s),可以被解析为整型变量(int a),还可以被解析为浮点数(float f或double d)

例题

https://www.nowcoder.com/practice/fcd30aac9c4f4028b23919a0c649824d?tpId=290

BC45 小乐乐改数字

描述

小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐修改后得到的数字。

示例1

输入:

复制代码
222222

输出:

复制代码
0

示例2

输入:

复制代码
123

输出:

复制代码
101

方法1:按字符串处理

cpp 复制代码
#include <iostream>
using namespace std;

int main() 
{
    string s;
    cin>>s;    
    for (int i=0;i<s.size();i++)
    {
        if (s[i]%2)
            s[i]='1';
        else 
            s[i]='0';  
    }
    cout<<stoi(s);
}
 

注意:最后一定要用stoi(s),不然打印s时可能会有前导0!!

(有关stoi函数参见C16.【C++ Cont】string类字符串的关系运算和与string有关的函数文章)

提交结果

方法2:按整数处理

cpp 复制代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int ret = 0;
	int i = 0; //记录权重的指数 
	while (n)
	{
		if (n % 10 % 2 ) // 为奇数
		{
			ret += pow(10, i); // pow(a, b) 
		}
		n /= 10; 
		i++; 
	}
	cout << ret << endl;
	return 0;
}
提交结果

结论

输入的数字有两种看法:按字符串读或按整数/小数读

相关推荐
上位机付工8 分钟前
开源免费的上位机数据转换库
开发语言·c#
old_power8 分钟前
【PCL】Segmentation 模块—— 平面模型分割(Plane model segmentation)
c++·计算机视觉·3d
学习前端的小z9 分钟前
【C++】B2112 石头剪子布
开发语言·c++
Jacob_AI10 分钟前
大模型——RAG
数据库·人工智能·算法
二当家的素材网10 分钟前
一分钟学会文心一言API如何接入,文心一言API接入教程
开发语言·语言模型·文心一言
小桑要读研25 分钟前
二级缓存(缓存到Redis)
java·开发语言·spring
诺谦29 分钟前
3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)
开发语言·qt
晴子呀37 分钟前
单例模式的几种实现方式
java·开发语言
有杨既安然1 小时前
Python爬取豆瓣图书网Top250 实战
开发语言·爬虫·python·网络爬虫·爬虫实战
ktkiko111 小时前
Netty中的NioEventloop(1)
java·开发语言·netty·高并发学习