6翻了與沙漏列印
第一題涉及到字串,根據題目意思,我們只需要統計字串中連續“6”的個數,再進行轉換相應的數值進行輸出就行,其他字符不變,不過值得注意的是在字串中有空格,所以可以選擇string類中的getline(),當然也有其他方法,這里就推薦一種,選題者:燭光
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str,str1;//str1的作用就是統計一段連續‘6’的字串
getline(cin, str);
for (int i = 0; i < str.size(); i++)//對字串進行遍歷
{
if (str[i] != '6')//判斷,如果該字符不等于為6,這輸出該字符
{
/*這組判斷是必要的,打個比方,比如當遍歷完6666時,str1的長度為4,
并且下一個字符不為6,在輸出這個目前不為6的字符前,應當先把之前str1(str1="6666"),
進行相應的轉化輸出,因此進入第二個輸出為9
*/
if (str1.size() > 9)
{
cout << "27";
str1 = "";//每一次輸出記得把str1歸空,不然會把不連續的6進行個數疊加,
}
else if (str1.size() <= 9 && str1.size() > 3)
{
cout << "9";
str1 = "";
}
else if(str1.size()<=3&&str1.size()>0)
{
cout << str1;
str1 = "";
}
cout << str[i];
}
else//對str[i]=='6'進行統計
{
str1 += str[i];
}
}
/*跑完這個回圈之后,下面的這組也要加上,原因就是如果一個字串
最后幾個字符都是‘6’,這樣就會造成最后一組連串的‘6’無法轉換輸出,
原因是上面是要碰到下一個字符不為‘6’我才輸出,如果到了字串末端,
沒碰到不是‘6’的字符,會造成最后一個資料遺失的,而下面的判斷正好解決了這個問題,*/
if (str1.size() > 9)
{
cout << "27";
str1 = "";
}
else if (str1.size() <= 9 && str1.size() > 3)
{
cout << "9";
str1 = "";
}
else if (str1.size() <= 3 && str1.size() > 0)
{
cout << str1;
str1 = "";
}
return 0;
}
第二題就是列印沙漏,對于圖形的列印,我覺得首先看清楚圖形的細節,之后再找找規律,這樣感徑訓更容易想出來方法,選擇題者:芽孢子
#include<bits/stdc++.h>
using namespace std;
int main(){
int num=0;char c;cin>>num>>c;
int sum=1,len;
//這個沙漏的列印我們要先確定低的長度
//很明顯這個沙漏至少要有兩層那么我們在確定地的長度的長度的時候是從第二層開始逐層加2(以最中間為第一層)
for(int i=3;i<1000;i+=2){//這個回圈的上線要絕對夠
//我們要在這個沙漏所用的c的數量是在和下一個的數量
//如果下一個的數量不夠那么這次回圈的i即使沙漏的底了
if(num>=sum&&num<=sum+i*2){
len=i-2;
break;
}
sum+=i*2;
}
int sumtemp=len;
int j=0,counter=0;
//開始列印上半部分
for(int i=len;i>=1;i-=2,j++){
//列印每層前的空格
for(int i1=0;i1<j;i1++)cout<<" ";
for(int i2=0;i2<i;i2++){
//統計c的用量,當然在第一個回圈我們干了類似的事,那個sum的資料也是可以使用的
cout<<c;counter++;
}
cout<<endl;
}
//下半部分
for(int i=3;i<=len;i+=2,j--){
for(int i2=0;i2<j-2;i2++)cout<<" ";
for(int i3=0;i3<i;i3++){
cout<<c;counter++;
}
cout<<endl;
}
//結尾輸出好友幾個c沒有使用
cout<<num-counter;
return 0;
}
最后的一道AcWing的題就出個比較簡單的吧,就是大家最會的列舉,題目的資料量本身也不大,直接暴力就可以,當然也可以根據題目的條件對回圈進行優化,或者優化方法都可行,下面就是暴力時刻
#include<iostream>
#include<string>
using namespace std;
int main()
{
int l, r, sum = 0;
string str;
cin >> l >> r;
for (int i = l; i <= r; i++)
{
str = to_string(i);//把int型別轉化為字串(string)
for (int j = 0; j < str.size(); j++)
{
if (str[j] == '2')
{
sum++;
}
}
}
cout << sum << endl;
return 0;
}
相信小伙伴們都明白上面流程,這里就不再多加解釋了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271463.html
標籤:其他
下一篇:五子棋(人機對弈)
