210105|標準1152、1157、1546、2577、10818|C++
1152
1152:単語数
初めての試み
stringタイプを使用してgetline関数でスペースを含む文を受信
でも間違った答えを得た!
例と同じようにうまく動いているのに、なぜか…!!#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence;
getline(cin, sentence);
int count = 0;
for (int i = 0; i < sentence.size(); i++) {
if (sentence[i] == ' ' && i != sentence.size() - 1) {
if (i != 0)
count++;
}
if (i == sentence.size() - 1)
count++;
}
cout << count;
}
2回目の試み
だからcharタイプで文章を受け入れることにした.cin.getlineを使用して最大10万文字を受信します.しかし、結果は間違っていた.同様に、実行は正常です.#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sentence[1000000];
cin.getline(sentence, 1000000);
int count = 0;
for (int i = 0; i < strlen(sentence); i++) {
if (sentence[i] == ' ' && i != strlen(sentence) - 1) {
if (i != 0)
count++;
}
if (i == strlen(sentence) - 1)
count++;
}
cout << count;
}
終局
だから私は例外の処理に問題があることに気づいた.
従来の方法は、文字列の最初の部分を無条件に排除してcountを行い、文字列の最後の部分が現れた場合、無条件に単語の終了を判断してcount+1を行う.
まず、文入力が空の場合に0を返し、文字列数が0から終了までスペースを考慮して1からcountまで追加します.ここで、最初または最後が空白であればcount-1の方式です.
前の方式との違いや気づかなかった間違いをよく考えましたが・・・
気づかなかったどの部分で白俊が間違った答えだと判断したのか分からない.#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence;
getline(cin, sentence);
if (sentence.empty()) {
cout << "0";
return 0;
}
int count = 1;
for (int i = 0; i < sentence.length(); i++) {
if (sentence[i] == ' ')
count++;
}
if (sentence[0] == ' ')
count--;
if (sentence[sentence.length() - 1] == ' ')
count--;
cout << count;
}
1157
単語学習 #include <iostream>
#include <string>
using namespace std;
int main() {
string word;
cin >> word;
int count[100] = { 0, };
for (int i = 0; i < word.length(); i++) {
if (word[i] >= 97 && word[i] <= 122) {
word[i] -= 32;
}
count[word[i]]++;
}
int max = 0;
char result = '?';
for (int j = 65; j <= 90; j++) {
if (max < count[j]) {
max = count[j];
result = j;
}
else if (max == count[j])
result = '?';
}
cout << result;
}
アスキーコードを用いて小文字を大文字に変換した後、各文字のアスキーコードインデックスの番号をcount[100]に記憶する.
次に各インデックスを比較し、最大値を含むインデックスを見つけて出力します.インデックスはAskiコードを表すためです.
maxが対応するインデックス数と同じ場合は、次の操作を行います.変数をに格納します.
1546
1546号:平均値 #include <iostream>
#include <string>
using namespace std;
int main() {
int size;
cin >> size;
double score[1000];
int max = 0;
for (int i = 0; i < size; i++) {
cin >> score[i];
if (score[i] > max)
max = score[i];
}
double sum = 0;
for (int i = 0; i < size; i++) {
score[i] = score[i] / max * 100;
sum += score[i];
}
cout << fixed;
cout.precision(2);
cout << sum / (double)size;
}
2577
2577:数値の個数 #include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int r;
r = a * b * c;
string result = to_string(r);
vector<string> vec(result.size());
for (int i = 0; i < vec.size(); i++) {
vec[i] = result[i];
}
int size = 0, count;
while (size < 10) {
count = 0;
for (int i = 0; i < vec.size(); i++) {
if (vec[i] == to_string(size))
count++;
}
cout << count << endl;
size++;
}
}
to_string
intを文字列に変換する関数です.
10818
10818号:最小、最大 #include <iostream>
#include <vector>
using namespace std;
int main() {
int num;
cin >> num;
vector<int> vec(num);
int min = 1000000, max = -1000000;
for (int i = 0; i < num; i++) {
cin >> vec[i];
if (vec[i] < min)
min = vec[i];
if (vec[i] > max)
max = vec[i];
}
cout << min << " " << max;
}
Reference
この問題について(210105|標準1152、1157、1546、2577、10818|C++), 我々は、より多くの情報をここで見つけました
https://velog.io/@nayeon_p00/210105-백준-1152-1157-1546-2577-10818-C
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence;
getline(cin, sentence);
int count = 0;
for (int i = 0; i < sentence.size(); i++) {
if (sentence[i] == ' ' && i != sentence.size() - 1) {
if (i != 0)
count++;
}
if (i == sentence.size() - 1)
count++;
}
cout << count;
}
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sentence[1000000];
cin.getline(sentence, 1000000);
int count = 0;
for (int i = 0; i < strlen(sentence); i++) {
if (sentence[i] == ' ' && i != strlen(sentence) - 1) {
if (i != 0)
count++;
}
if (i == strlen(sentence) - 1)
count++;
}
cout << count;
}
#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence;
getline(cin, sentence);
if (sentence.empty()) {
cout << "0";
return 0;
}
int count = 1;
for (int i = 0; i < sentence.length(); i++) {
if (sentence[i] == ' ')
count++;
}
if (sentence[0] == ' ')
count--;
if (sentence[sentence.length() - 1] == ' ')
count--;
cout << count;
}
単語学習
#include <iostream>
#include <string>
using namespace std;
int main() {
string word;
cin >> word;
int count[100] = { 0, };
for (int i = 0; i < word.length(); i++) {
if (word[i] >= 97 && word[i] <= 122) {
word[i] -= 32;
}
count[word[i]]++;
}
int max = 0;
char result = '?';
for (int j = 65; j <= 90; j++) {
if (max < count[j]) {
max = count[j];
result = j;
}
else if (max == count[j])
result = '?';
}
cout << result;
}
アスキーコードを用いて小文字を大文字に変換した後、各文字のアスキーコードインデックスの番号をcount[100]に記憶する.次に各インデックスを比較し、最大値を含むインデックスを見つけて出力します.インデックスはAskiコードを表すためです.
maxが対応するインデックス数と同じ場合は、次の操作を行います.変数をに格納します.
1546
1546号:平均値 #include <iostream>
#include <string>
using namespace std;
int main() {
int size;
cin >> size;
double score[1000];
int max = 0;
for (int i = 0; i < size; i++) {
cin >> score[i];
if (score[i] > max)
max = score[i];
}
double sum = 0;
for (int i = 0; i < size; i++) {
score[i] = score[i] / max * 100;
sum += score[i];
}
cout << fixed;
cout.precision(2);
cout << sum / (double)size;
}
2577
2577:数値の個数 #include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int r;
r = a * b * c;
string result = to_string(r);
vector<string> vec(result.size());
for (int i = 0; i < vec.size(); i++) {
vec[i] = result[i];
}
int size = 0, count;
while (size < 10) {
count = 0;
for (int i = 0; i < vec.size(); i++) {
if (vec[i] == to_string(size))
count++;
}
cout << count << endl;
size++;
}
}
to_string
intを文字列に変換する関数です.
10818
10818号:最小、最大 #include <iostream>
#include <vector>
using namespace std;
int main() {
int num;
cin >> num;
vector<int> vec(num);
int min = 1000000, max = -1000000;
for (int i = 0; i < num; i++) {
cin >> vec[i];
if (vec[i] < min)
min = vec[i];
if (vec[i] > max)
max = vec[i];
}
cout << min << " " << max;
}
Reference
この問題について(210105|標準1152、1157、1546、2577、10818|C++), 我々は、より多くの情報をここで見つけました
https://velog.io/@nayeon_p00/210105-백준-1152-1157-1546-2577-10818-C
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <iostream>
#include <string>
using namespace std;
int main() {
int size;
cin >> size;
double score[1000];
int max = 0;
for (int i = 0; i < size; i++) {
cin >> score[i];
if (score[i] > max)
max = score[i];
}
double sum = 0;
for (int i = 0; i < size; i++) {
score[i] = score[i] / max * 100;
sum += score[i];
}
cout << fixed;
cout.precision(2);
cout << sum / (double)size;
}
2577:数値の個数
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int r;
r = a * b * c;
string result = to_string(r);
vector<string> vec(result.size());
for (int i = 0; i < vec.size(); i++) {
vec[i] = result[i];
}
int size = 0, count;
while (size < 10) {
count = 0;
for (int i = 0; i < vec.size(); i++) {
if (vec[i] == to_string(size))
count++;
}
cout << count << endl;
size++;
}
}
to_string
intを文字列に変換する関数です.10818
10818号:最小、最大 #include <iostream>
#include <vector>
using namespace std;
int main() {
int num;
cin >> num;
vector<int> vec(num);
int min = 1000000, max = -1000000;
for (int i = 0; i < num; i++) {
cin >> vec[i];
if (vec[i] < min)
min = vec[i];
if (vec[i] > max)
max = vec[i];
}
cout << min << " " << max;
}
Reference
この問題について(210105|標準1152、1157、1546、2577、10818|C++), 我々は、より多くの情報をここで見つけました
https://velog.io/@nayeon_p00/210105-백준-1152-1157-1546-2577-10818-C
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <iostream>
#include <vector>
using namespace std;
int main() {
int num;
cin >> num;
vector<int> vec(num);
int min = 1000000, max = -1000000;
for (int i = 0; i < num; i++) {
cin >> vec[i];
if (vec[i] < min)
min = vec[i];
if (vec[i] > max)
max = vec[i];
}
cout << min << " " << max;
}
Reference
この問題について(210105|標準1152、1157、1546、2577、10818|C++), 我々は、より多くの情報をここで見つけました https://velog.io/@nayeon_p00/210105-백준-1152-1157-1546-2577-10818-Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol