Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从给定的I'序列中形成最小数;s和D';s_Python_C++_Algorithm_Vector - Fatal编程技术网

Python 从给定的I'序列中形成最小数;s和D';s

Python 从给定的I'序列中形成最小数;s和D';s,python,c++,algorithm,vector,Python,C++,Algorithm,Vector,给定一个由“I”和“D”组成的序列,其中“I”表示递增序列,“D”表示递减序列。编写一个程序,对给定的序列进行解码,以构造最小数,而不重复数字。 数字应从1开始,即不应有零。 Input: D Output: 21 Input: I Output: 12 Input: DD Output: 321 Input: II Output: 123 Input: DIDI Output: 21435 Input:

给定一个由“I”和“D”组成的序列,其中“I”表示递增序列,“D”表示递减序列。编写一个程序,对给定的序列进行解码,以构造最小数,而不重复数字。 数字应从1开始,即不应有零。

Input: D Output: 21 Input: I Output: 12 Input: DD Output: 321 Input: II Output: 123 Input: DIDI Output: 21435 Input: IIDDD Output: 126543 Input: DDIDDIID Output: 321654798 C++代码(不工作,即没有给出正确的输出)

#包括
使用名称空间std;
矢量数字(字符串s){
向量ans={1};
整数计数=0;
用于(字符常量和c:s){
如果(c=='I'){
计数=0;
int k=ans.size();
ans.推回(k+1);
}
否则{
计数++;
int tmp=ans.back();
对于(int i=ans.size()-1;i>ans.size()-1-计数;i--){
ans[i]+=1;
}
ans.push_back(tmp);
}
}
返回ans;
}
int main(){
字符串s;
cin>>s;
矢量ans=数字;
对于(int i=0;i ANS Ssiz()/Cuth>在C++中返回一个<代码> SsieZiT,它是未签名的(根据您的配置,32位或64位)。您可以简单地将<代码> ANS SIZE()/<代码> > <代码> int >代码>以修复您的问题,如:

for ( int i = static_cast<int>(ans.size()) - 1; i > static_cast<int>(ans.size()) - 1 - count; i-- )
for(int i=static_cast(ans.size())-1;i>static_cast(ans.size())-1-count;i--)
使用调试器,您可以检查您是否从未真正进入
for循环
的主体中进行输入

正如程序员所指出的,无符号到有符号的转换可能是实现定义的,但对于您的示例来说,这在大多数(所有?)情况下都应该有效。 从
[conv.integral]/3

如果目的地类型是有符号的,如果可以在目的地类型中表示,则该值不变; 否则,该值由实现定义


“不工作”是什么意思?它没有给出正确的输出@ChrisMMDon不要添加“编辑”或“更新”到您的问题。只需完成问题。如果需要了解编辑历史记录是如何更改的,我们可以查看编辑历史记录。您应该向代码中添加一些打印语句以监视变量的值,或者使用调试器!您的for循环从未被输入,因为
ans.size()-1-count
导致整数下溢为
ans.size()返回一个<代码> STD::SigZyt < /Cube >,它是一个无符号的整数。@ JuthStalOnter在一个不相关的注释上,只是一个注释,它是未定义的,以签名的形式是实现的。@ NotAProgrammer,你能用一个例子来详细说明一下吗?我不明白。@ JuStAutoLee,用C++的引用来查看我的编辑。r仅适用于无符号类型范围之外的值。似乎不太可能
ans.size()
将大于
int
的最大值,特别是假设
int
至少为32位(可能是这样)。@其他人可能会对此(以及线程)有更多的了解.但不,我想不出什么时候使用小数值非负数会导致问题。当然,在你的例子中,你试图将-1赋给一个无符号整数,这会导致问题。
#include <bits/stdc++.h>

using namespace std;

vector<int> digits(string s){
    vector<int> ans = {1};
    int count = 0;
    for (char const &c : s){
        if (c == 'I'){
            count = 0;
            int k = ans.size();
            ans.push_back(k + 1);
        }
        else{
            count ++;
            int tmp = ans.back();
            for (int i = ans.size() - 1; i > ans.size() - 1 - count; i--){
                ans[i] += 1;
            }
            ans.push_back(tmp);
        }
    }
   return ans; 
}

int main(){
    string s;
    cin >> s;
    vector<int> ans = digits(s);
    for (int i = 0; i < ans.size(); i++){
        cout << ans[i];
    }
    return 0;
}
for ( int i = static_cast<int>(ans.size()) - 1; i > static_cast<int>(ans.size()) - 1 - count; i-- )