我正在撰寫一個程式來解決請求:
計算用于在每個測驗用例中創建數字的火柴棒的數量
雖然是一個簡單的問題,但讓我相當困惑的是程式沒有錯誤但輸出卻不如預期。
源代碼:
#include <bits/stdc .h>
using namespace std;
int main() {
map<char,int> digits={
{'0',6},{'1',2},{'2',5},{'3',5},{'4',4},{'5',5},{'6',6},{'7',3},{'8',7},{'9',6}
};
map<char,int> peterMap;
int t; cin >> t;
string peterNum[t];
for(string &a:peterNum) cin >> a;
for(string b:peterNum){
int sticks = 0;
string tomNum, n;
for(char c:b) peterMap[c];
for(auto d:peterMap) sticks = d.second*digits[d.first];
cout << sticks << ' ';
}
return 0;
}
輸入:
5 (Number of test cases)
1 0 5 10 15
輸出:
2 8 13 21 28
預期輸出:
2 6 5 8 7
uj5u.com熱心網友回復:
你的代碼有3個問題
不要使用
<bits/stdc .h>,它是非標準的,并且會促進不良做法。可變長度陣列不是標準 C ,請
std::vector改用。但在這種情況下這實際上是沒有必要的,因為......peterMap是完全不必要的,需要洗掉,它搞砸了你的結果。
試試這個:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<char,int> digits = {
{'0',6},{'1',2},{'2',5},{'3',5},{'4',4},{'5',5},{'6',6},{'7',3},{'8',7},{'9',6}
};
int t; cin >> t;
for (int i = 0; i < t; i) {
string a; cin >> a;
int sticks = 0;
for(char ch : a) sticks = digits[ch];
cout << sticks << ' ';
}
return 0;
}
在線演示
uj5u.com熱心網友回復:
問題在這里:
for(char c:b) peterMap[c]; // <<--here
for(auto d:peterMap) sticks = d.second*digits[d.first];
您正在增加 map 中的數量并在下一個陳述句中使用它,而無需為下一個輸入條目重置。
但是您的代碼存在幾個問題:
- 不要使用
#include <bits/stdc .h>. 我討厭hackerrank 在他們的解決方案模板中使用它。 - 使用
string peterNum[t];不是評論中提到的標準。 - 從我的角度來看,您至少不需要使用
std::map。peterMap只需遍歷每個字串的字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494938.html
上一篇:如何將JavaScript變數傳遞給PHP函式引數?[復制]
下一篇:如何使用變數讀取嵌套的json

