最近我撰寫了一個程式來從字串中選擇k 個數字,從左到右列印出具有k 個字符的數字和可以從字串本身中得到的最小數字,例如:輸入:3 89678982 輸出:672 然后我的代碼根本沒有列印!!代碼 :
#include<bits/stdc .h>
using namespace std;
int k,j=0,i;
string s;
int main() {
cin>>k>>s;
for(int i=0;i<s.size();i ) s[i]-=48;
int the2=0;
int Min=s[0];
while(j<0) {
for(i=the2;i<s.size();i ) {
if(Min>s[i])
{
Min=s[i];
break;
}
}
the2=i;
Min=s[i 1];
cout<<Min;
j ;
}
}
為什么會發生這種情況,我該如何解決?
uj5u.com熱心網友回復:
對于初學者來說,while 回圈的這個條件
while(j<0) {
立即計算為 false,因為該變數j是由 初始化的0。
int k,j=0,i;
還有這個 for 回圈
for(i=the2;i<s.size();i ) {
if(Min>s[i])
{
Min=s[i];
break;
}
}
查找小于Min初始值的第一個字符s[0]。但是你需要找到范圍內字串的最小值[0, s.length() - k 1)
也就是說,該程式確實執行了作業中描述的操作。
看來您的意思類似于以下內容。
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
int main()
{
std::string s;
size_t k = 0;
std::cin >> k >> s;
if (not ( s.size() < k ))
{
auto it = std::begin( s );
for (size_t i = 0; i < k; i )
{
it = std::min_element( it,
std::prev( std::end( s ), k - i - 1) );
std::cout << *it ;
}
std::cout << '\n';
}
}
如果進入
3 89678982
那么輸出將是
672
如果使用 for 回圈而不是呼叫標準演算法,std::min_element則程式可以如下所示
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
int main()
{
std::string s;
size_t k = 0;
std::cin >> k >> s;
if (not ( s.size() < k ))
{
std::string::size_type pos = 0;
for (size_t i = 0; i < k; i )
{
for (auto j = pos; j < s.size() - k i 1; j )
{
if (s[j] < s[pos]) pos = j;
}
std::cout << s[pos ];
}
std::cout << '\n';
}
}
uj5u.com熱心網友回復:
你不列印,因為j=0這樣的while回圈的條件(j<0)是從一開始就錯誤的。所以它的身體根本不會被執行。而你cout在那個回圈中
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404674.html
標籤:
