15 条题解
-
13
照常吐槽:看到了刚刚的兄弟提交的题解,点我的想法吗?em,一样一样的。
太简单了!题解
模拟一下下:先是四个数:长、宽、字符和模式,我分别用四个变量a b c d存储吧(
土不拉几)- 分两种情况,一种实心一种空心
- 实心:循环 a 次,每行输出 b 个字符 c
- 空心:
- 第一行输出 b 个字符 c
- 中间 a - 2 行每行输出两个字符 c 夹着的空格(b - 2个空格)汉堡
- 最后一行同样输出 b 个字符 c
#include <bits/stdc++.h> using namespace std; int main() { int a, b, d; char c; cin >> a >> b >> c >> d; if (d == 0) { for (int i = 1; i <= b; i++) cout << c; cout << endl; for (int i = 1; i <= a - 2; i++) { cout << c; for (int j = 1; j <= b - 2; j++) cout << " "; cout << c << endl; } for (int i = 1; i <= b; i++) cout << c; } else { for (int i = 1; i <= a; i++) { for (int i = 1; i <= b; i++) cout << c; cout << endl; } } return 0; }
-
8
题前吐槽
照例第一题来吐槽一下。 咳咳……我第一眼看到觉得这啥题难度评分 ,才俩过的,太拉了……
直到,我被输入坑了……(我习惯用 所以被坑了, 应该没事)
[WTD at 2023.5] 完稿
[UPD at 2023.10.14] 修改了错误的 。
题解
简单的模拟(还能不模拟吗),本来就是一个照给的方式输出的事,但还是简单阐述一下。首先输入是四个数“”,就是简单的:
int n, m; char c; bool mode; // 用bool存了,省3Bit空间…… // scanf输入 scanf("%d%d%c%d", &n, &m, &c, &mode); //但还是用“%d”输入 // 或者cin输入(没有坑人问题) cin >> n >> m >> c >> mode;
然后有两种实现方法,由于都不复杂,就不分成两个思路说了。
首先第一种,简单直白,根据 分类讨论:
// 也不复杂直接贴代码 if (mode) //实心 { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { printf("%c", c); // 统统输出c } printf("\n"); // 记得换行 } } else // 空心 { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (/* 某条件 */) printf("%c", c); // 作为边框 else printf(" "); // 空心 } printf("\n"); } }
另一种就是都用一个 循环,判断 再决定:
for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (mode) printf("%c", c); else { if (/* 某条件 */) printf("%c", c); else printf(" "); } } printf("\n"); }
都差不多,这题唯一难点在于“某条件”,实际上就是根据 和 判断是否属于边框部分。
这里用样例举个例:
@@@@@@@ <-----边框 (i == 1) @ @ @ @ @ @ @ @ @ @ @@@@@@@ <-----边框 (i == n) ^ ^ | | 边框 边框 (j == m) (j == 1)
整理:
(i == 1) || (i == n) || (j == 1) || (j == m)
本题真实难度:2最后一个坑点:如果使用 要注意 输入
%c
时不忽略空格,随便一个字符就读入,如果像上面演示程序那样写 ,会得到 ,应当在%c
前添加一个空格这可能就是难度为2的来源。#include <bits/stdc++.h> using namespace std; int n, m; char c; bool mode; int main() { scanf("%d%d %c%d", &n, &m, &c, &mode); if (mode) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { printf("%c", c); } printf("\n"); } } else { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (i == 1 || i == n || j == 1 || j == m) printf("%c", c); else printf(" "); } printf("\n"); } } return 0; }
#include <bits/stdc++.h> using namespace std; int n, m; char c; bool mode; int main() { scanf("%d%d %c%d", &n, &m, &c, &mode); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (mode) printf("%c", c); else { if (i == 1 || i == n || j == 1 || j == m) printf("%c", c); else printf(" "); } } printf("\n"); } return 0; }
-
2
//这道题其实不算太难,学过Level 2并且预习过Level 4的char命令的童鞋(讲个谐音)们应该都会,请看题解~
#include <iostream>//头文件在手,天下我独有! using namespace std; int main() { int g, k, x; char f;//f是字符,要用char命令啦,否则直接打出来就是个数字 cin >> g >> k >> f >> x; if(x == 1) { for (int i = 1; i <= k * g; i++) { cout << f; if (i % k == 0) { cout << endl;//f的个数(空心就不一定咯)i到宽,行就必须给俺换 }//i到宽的倍数也得换,表示(i/ k)条宽【请叫我押韵大王】 }//i到了一条宽该到的长度(k),此时不换行,更待何时? } else { for (int i = 1; i <= k; i++) { cout << f;//先打第一行 } cout << endl;//然后再换行 for (int j = 1; j <= g - 2; j++)//接着打中间 { cout << f;//打一行的两头 for (int l = 1; l <= k - 2; l++) {//(k - 2)表示一行的长度减去两头 cout << " ";//打一行中间的空格 } cout << f << endl;//打一行的两头 } for (int m = 1; m <= k; m++) { cout << f;//最后打最后一行 } } return 0;//写上return 0,天下我问鼎! }
先别走~
最后,希望大家给个大大的赞,谢谢!
-
2
(崩溃!!!)写了一大半的题解,中途退出去复制个代码,结果回来全没了TvT。这已经是第五遍从头开始了……
按我们数学老师的话来说:这道题我这么讲谁都能听懂。我们先来看题:
题目描述
根据参数,画出矩形。输入四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。
输入
输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。
输出
输出画出的图形。
样例
输入数据 1
7 7 @ 0
输出数据 1
@@@@@@@ @ @ @ @ @ @ @ @ @ @ @@@@@@@
题目分析
简单来说,这道题就是给你四个参数,让你用程序按照规定画出一个矩形。 第一个和第二个参数分别为矩形的宽(s竖着的)和长(横着的),我们用int变量来定义为a和b; 第三个参数是一个字符类型的变量,也是构成矩形的基本元素,直白点说,就是告诉你该用粗笔还是细笔画边框,该用什么颜色填充。我们用char类型变量把它定义为c; 第四个参数在我们画矩形时是要考虑的重要因素——实心和空心,按照画画的角度来说,就是涂色和画边框,按我们编程的角度来说,就是输不输出空格。我们也用int类型来定义它,取名为d。
大体思路
首先,我们要确定输出的载体。输出的是一个矩阵,我们首先想到的就是循环嵌套了(L5知识点),外层循环控制行数(变量a), 内层循环控制列数(变量b)。代码如下:
for(int i=1;i<=a;i++) { for(int j=1;j<=b;j++) { cout<<c; } cout<<endl; }
先别急,这只是最基础的框架,中间需要添加的部分且听我慢慢道来……接下来,咱们研究空心实心的问题。 实心就灰常简单了,上面的代码就是,不过要加一个if来判断(还有空心呢)。 空心呢,相对来说麻烦一些。样例中,第一行和最后一行(外层循环i等于1或i等于a)是不用空格的,直接输出即可。代码如下:
if(i==1||i==a) { for(int j=1;j<=b;j++) { cout<<c; } }
第二行到倒数第二行是需要空格的部分。每行的第一个字符和最后一个字符,就是第一列和最后一列的字符(内层循环j等于1或j等于b)不是空格,其他列则为空格。代码如下:
for(int j=1;j<=b;j++) { if(j==1||j==b) { cout<<c; } else { cout<<" "; } }
本题的思路大致如此,本人刚刚学到L8,如有不足请各位大佬们指导,本人将尽力改正,谢谢大家的批评和支持❤️
完整代码
完整代码如下:
#include <bits/stdc++.h>//万能头文件在手,天下我有 using namespace std;//std命名空间 int a,b,d;//参数1,2,4定义 char c;// int main()// { cin>>a>>b>>c>>d;//输入各参数 for(int i=1;i<=a;i++)//外层循环 控制行数 { if(d==0)//空心 { if(i==1||i==a)//第一行或最后一行 { for(int j=1;j<=b;j++)//内层循环 控制列数 { cout<<c;//输出字符 } } else//其他行 { for(int j=1;j<=b;j++) { if(j==1||j==b)//第一列或最后一列 { cout<<c;//输出字符 } else//其他列 { cout<<" ";//输出空格 } } } } else//实心 { for(int j=1;j<=b;j++) { cout<<c; } } cout<<endl;//外层循环结尾输出换行 } return 0;//返回数值0,程序运行结束 }
-
1
楼上诸位大佬已经分析的差不多了,我也发个题解凑凑热闹吧
AC代码:
#include<bits/stdc++.h> //万能头文件,启动! using namespace std; int a,b,n; char x; int main() { cin >> a >> b >> x >> n; if(n == 1) //实心 { for(int i = 1;i<=a;i++) { for(int j = 1;j<=b;j++) { cout << x; } cout << endl;//记得换行,记得换行,记得换行! } } else if(n == 0) //空心(其实else也可以) { for(int i = 1;i<=a;i++) { for(int j = 1;j<=b;j++) { if(i == 1||i == a||j == 1||j == b)//条件判断 { cout << x; } else { cout << " "; } } cout << endl; } } return 0; }
-
1
啊…… 各位大佬的题解都很厉害啊,那
小爷,呸,我来谈谈我的想法,我是理科生,所以没有面面俱到,就简单写点注释,大家能看懂就看,看不懂呢可以看几位大佬的真知灼见。 仅表个人观点,不喜勿喷#include <iostream> using namespace std; int main() { int a,b; char ch; bool x; int i,j;
cin>>a>>b;//行、列 cin>>ch;//填充符号 cin>>x;//空心或实心 if(x)//实心 { for(i=1; i<=a; i++) { for(j=1; j<=b; j++) cout<<ch; cout<<endl; } } else//空心 { for(i=1; i<=a; i++) { for(j=1; j<=b; j++) { if((i==1)||(i==a)||(j==1)||(j==b))//四条边均按条件输出 cout<<ch; else cout<<" "; } cout<<endl; } } cout<<endl; return 0;
}
-
0
思路几乎相同
#include <iostream> using namespace std; int main() { int a,b,d; char c; cin >> a >> b >> c >> d; if (d==0) { for (int i=1;i<=b;i++) { cout << c; } cout << endl; for (int i=1;i<=a-2;i++) { cout << c; for (int j=1;j<=b-2;j++) { cout << " "; } cout << c << endl; } for (int i=1;i<=b;i++) { cout << c; } } else { for (int i=1;i<=a;i++) { for (int j=1;j<=b;j++) { cout << c; } cout << endl; } } return 0; }
-
0
#include <iostream> using namespace std; int main() { int n,m,y; char x; cin>>n>>m>>x>>y; if (y==0) { for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) { if (i==1||i==n||j==1||j==m) { cout<<x; } else{ cout<<" "; } } cout<<endl; } } else { for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) { cout<<x; } cout<<endl; } } return 0; }
-
0
#include <bits/stdc++.h> using namespace std; int n,a[50001],m; bool flag; char q; int main(){ cin>>n>>m>>q>>flag; if(flag){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cout<<q; } cout<<endl; } } else{ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(i==1||i==n||j==1||j==m){ cout<<q; } else{ cout<<' '; } } cout<<endl; } } return 0; }
easy
-
0
这个方法是一种基础的方法,好理解,编写简单,好记.(头文件和结尾需要自己加)
int a, b, d;//a是高,b是宽,d是0或1 char c;//图案 cin >> a >> b >> c >> d; for (int i = 1; i <= a; i++)//控制行数 { for (int j = 1; j <= b; j++)//控制列数 { if (d == 1)//实心 { cout << c; } else//空心 { if (i == 1 || i == a)//第一行和最后一行 { cout << c; } else if (j == 1 || j == b)//第一列和最后一列 { cout << c; } else// 除了上述地方,空心部分要输出空格 { cout << " ";//中间有空格 } } } cout << endl;//不要忘记换行 }
本人Level5,是AC,放心使用
-
0可以定义一个 ``mode`` 函数, 就像这样:
#include <iostream> using namespace std; void mode (int a,int b,char iotsm,int ardo){ for (int i = 0;i < b;i++){ cout << iotsm; } cout << endl; for (int i = 0;i < a - 2;i++){ cout << iotsm; for (int j = 0;j < b - 2;j++){ if (ardo == 1){ cout << iotsm; } else{ cout << " "; } } cout << iotsm; cout << endl; } if (a > 1){ for (int i = 0;i < b;i++){ cout << iotsm; } cout << endl; } return; } int main(){ int w,x; char y; int z; cin >> w >> x >> y >> z; mode(w,x,y,z); return 0; }
本人才level4,自己预习了一下level5的函数。
</p>
- 1
信息
- ID
- 2059
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- (无)
- 递交数
- 830
- 已通过
- 334
- 上传者