欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:题目解析
目录
- 👉🏻L1-002 打印沙漏
- 👉🏻L1-011 A-B
👉🏻L1-002 打印沙漏
mycode:
#include<iostream>
using namespace std;
int main()
{//中间行的符号数一定为1,上下符号数相同//所以假设要用x个符号来打印,上下符号数分别为x-1//2//符号数确定打几行:等差数列;行数越多,意味着符号用的越多int N;int remain;char c;cin>>N>>c;if(N<7){remain = N-1;cout<<"*"<<endl;cout<<remain<<endl;return 0;}int use = N-1;//use是我们要用多少符号数,默认先将中间行的一颗符号去掉for(int i = use;i>=0;i--){if(i%2==0)//说明上下符号数相同才能进来{//接下里我们单看上/下部分,是否满足等差数列和int partsum = i/2;int count = 0;for(int j = 3;;j+=2){count+=j;if(count>partsum){//说明不满足,则退出break;}else if(count==partsum){//满足,说明此时的符号数是能用掉尽可能多的符号数了use = i;goto end;//跳出循环}}}}end:use+=1;//把中间符号加回来remain = N-use;//接下来进行打印//我们可以将符号存进容器中,顺序和逆序打印vector<string> v;v.push_back(string(1,c));//第一个元素肯定是中间行的一个cint partsum = (use-1)/2;for(int i = 3;;i+=2){string s;for(int j = 0;j<i;j++){s+=c;}partsum-=i;v.push_back(s);if(!partsum)break;}int sz = v.size();//打印上半部分 for(int i = sz-1;i>=0;i--){//打印空格for(int j = 0;j<sz-i-1;j++)cout<<" "; cout<<v[i]<<endl;}//下半部分for(int i = 1;i<v.size();i++){//打印空格for(int j = 0;j<sz-i-1;j++)cout<<" "; cout<<v[i]<<endl;}cout<<remain<<endl;return 0;}
字符用to_string变为字符串会用的是ASCII码的整型值,所以上述用了匿名函数
参考代码:
#include <stdio.h>
#include <math.h>
int main()
{int n;char c;scanf("%d %c", &n, &c);int h = sqrt((n + 1) / 2); //h为倒沙漏的层数for (int i = 0; i < h; i++) //打印上半层沙漏{for (int j = 0; j < i; j++)printf(" ");for (int j = 0; j < 2 * (h - i) - 1; j++)printf("%c", c);printf("\n");}for (int i = 2; i <= h; i++) //打印下半层沙漏{for (int j = 0; j < h - i; j++)printf(" ");for (int j = 0; j < 2 * i - 1; j++)printf("%c", c);printf("\n");}printf("%d", n - 2 * h * h + 1);return 0;
}
这里用到了公式:h = sqrt((n + 1) / 2);
//h为倒沙漏的层数
所以可以得到奇数层的符号数总数公式:n = 2 * h * h-1.
偶数层的话为:n = 2 * h * h;
注:h为上半层的长度(若为奇数层,则包括中间行)
👉🏻L1-011 A-B
mycode:
#include<bits/stdc++.h>
#include<string>
using namespace std;
int main()
{string s1, s2;getline(cin, s1);//中间不需要getchar()getline(cin, s2);size_t pos = 0;while (pos != string::npos){pos = s1.find_first_of(s2);if (pos!= string::npos)s1.erase(s1.begin()+pos);//+s1.begin()避免迭代器失效}cout << s1 << endl;return 0;
}