upc 1000 梦里的难题 学习过程//换行和回车的区别?//如何输入包含换行的字符串?(一)

题目描述

生化危机血腥暴力的场面对小星星的冲击很大,晚上频繁地做起了梦,梦里他担负起拯救世人消灭僵尸的重任,眼看就能拿到消除 T 病毒的解药还世界清静,但 T 病毒人工智能电脑挡住了星星的去路,它声称研制出 T 病毒的目的是因为察觉人类智力退化,只有聪明的人才能存活下来,如果想要拿到解药,必须回答出下面这个难题:
有 N(1≤N≤100000)个数字(由 1 到 K 组成,1≤K≤10000),排成一列形成数字串,例如 1,5,3,2,5,1,3,4,4,2,5,1,2,3 它包含了很多的子序列,比如(5)、(1,3,2)、(1,5,3)、(3,4,1,3),请思考该列数字串不包含的最短的由 1 到 K 组成的的子序列长度是多少?

输入

第一行输入两个整数 N 和 K,接下来 N 行分别输入这 N 个数字。

输出

一个整数表示原数字串中不包含的最短子序列长度。

思路:这道题,我读了两边也并没有很好的思路,

第一点:我开始写输入,在百度上花费了一定的时间,但是并没有找到特别喜欢的方法,

然后突然想起,我可以把数字当成一个字符串,计算字符串的长度,然后再取出存入数组,这样我就能遍历数组进行操作了。

但是这里有一个问题,题目要求每一个数字输入时用换行隔开,这里scanf不再适用(使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入空格会认为字符串结束。

string s,总是报错,原来是c语言中没有string,我把头文件改成了c++。

我打算使用 gets(),但这个函数好像只可以用char s[]的形式,我舍弃了string s的形式。

c语言中,字符串的定义方式:char *s,s[n]。

现在的代码大概是这个样子。

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,k;
    char s[100005];
    scanf("%d%d",&n,&k);
    gets(s);

    printf("%d",s);

}

我到目前是很懵的状态,我百度c语言中可以接受换行的字符串的函数。

发现百度上很多答案都是换行符,似乎和回车是不同的。????

https://www.cnblogs.com/xiaowenhu/archive/2013/06/08/3127082.html

换行(\n)将当前位置移动到下一行开头。

回车(\r)将当前位置移动到本行开头。

退格(\b)将当前位置移动到钱一列。

Enter键按下后会执行\n\r这样就是我们看到的一般意义的回车了,

但这个知识点对我解题似乎没什么帮助????

然后我找到了这个

https://zhidao.baidu.com/question/588908180.html

翻了很多答案!

c语言怎么换行输入????????????

下午继续更

猜你喜欢

转载自blog.csdn.net/Shahare/article/details/81232219