24 条题解
-
21
这一道题可以拆分成4各部分来做
- 第一部分:输出 n - 1个空格和 n个星号
- 第二部分:重复进行 n - 1次,每次输出 n - i - 2个空格 + 一个星 + n + i + i 个空格 + 一个星 + 换行
- 第三部分:重复进行 n - 2次,每次输出 n - i - 2个空格 + 一个星 + n + i + i 个空格 + 一个星 + 换行
- 最后一个部分同第一个部分
好了,找完了规律,看看代码吧~(全AC,请放心食用)
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n - 1; i++) cout << " "; for (int i = 1; i <= n; i++) cout << "*"; cout << endl; for (int i = 0; i <= n - 2; i++) { for (int j = 1; j <= n - i - 2; j++) cout << " "; cout << "*"; for (int j = 1; j <= n + i + i; j++) cout << " "; cout << "*" << endl; } for (int i = n - 3; i >= 0; i--) { for (int j = 1; j <= n - i - 2; j++) cout << " "; cout << "*"; for (int j = 1; j <= n + i + i; j++) cout << " "; cout << "*" << endl; } for (int i = 1; i <= n - 1; i++) cout << " "; for (int i = 1; i <= n; i++) cout << "*"; }
-
7
这题有些难度啊……呵呵( ̄▽ ̄)"
#include <iostream> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n - 1; i++) { cout << " "; } for (int i = 1; i <= n; i++) { cout << "*"; } cout << endl; for (int i = 1; i <= n - 1; i++) { for (int j = 1; j <= n - i - 1; j++) { cout << " "; } cout << "*"; for (int j = 1; j <= n + i + i - 2; j++) { cout << " "; } cout << "*" << endl; } for (int i = 1; i <= n - 2; i++) { for (int j = 1; j <= i; j++) { cout << " "; } cout << "*"; for (int j = 1; j <= n * 2 - (i * 2 - 1) + n - 5; j++) { cout << " "; } cout << "*" << endl; } for (int i = 1; i <= n - 1; i++) { cout << " "; } for (int i = 1; i <= n; i++) { cout << "*"; } return 0; }
-
5
可以将要输出的图形存在一个char类型的二维数组中,要先分析出图形的行数和列数 行数=2n-1 列数=n+2</em>(n-1)
int a = n + 2 * (n - 1); //列数 int b = 2 * n - 1; //行数
根据图形的行数和列数,在二维数组中开辟一个行数×列数的空白区域(空白用空格来代替)
//根据图形行数和列数,在二维数组中开一个行数×列数的空格区域 for (int i = 1; i <= b; i++) //遍历行 { for (int j = 1; j <= a; j++) //遍历列 { c[i][j] = ' '; } }
接下来就将 * 存入数组中对应的位置上 存储规则如下图所示:
//将*存入数组中对应的位置 for (int i = 1; i <= b; i++) //遍历行 { if (i == 1 || i == b) //第一行和最后一行 { for (int j = n; j <= 2*n-1; j++) //从下标n开始,设置n个* { c[i][j] = '*'; } } else if (i <= b / 2) //第2~n-1行,左边位置n-i+1处一个*,右边位置a-n+i处一个* { c[i][n - i + 1] = '*'; c[i][a - n + i] = '*'; } else if (i == n) //第n行,*的位置在两端 { c[i][1] = '*'; c[i][a] = '*'; } else if (i > b / 2) //第n+1~b-1行,左边位置i-n+1处一个*,右边位置a+n-i处一个* { c[i][i - n + 1] = '*'; c[i][a + n - i] = '*'; } }
最后双重for循环输出该数组即可。
-
3
纯手搓🎉️ 🎉️ 🎉️
解题不易,给个赞吧❤️ ❤️ ❤️
直接上代码🚀️ 🚀️ 🚀️
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n * 2 - 1; i++) // 分多种情况来编写程序. { if (i == 1 || i == n * 2 - 1) // 1.第一行和最后一行.( 第1行或第2 * n - 1行 ) { for (int j = 1; j <= n - 1; j++) { cout << " "; } for (int k = 1; k <= n; k++) { cout << "*"; } } if (i == n) // 2.最中间的一行.( 第n行 ) { cout << "*"; for (int j = 1; j <= 3 * n - 4; j++) { cout << " "; } cout << "*"; } if (i > 1 && i < n) // 3.第一行与最中间的一行之间的所有行.( 第2行到第n - 1行 ) { for (int j = 1; j <= n - i; j++) { cout << " "; } cout << "*"; for (int k = 1; k <= n + 2 * i - 4; k++) { cout << " "; } cout << "*"; } if (i > n && i < n * 2 - 1) // 4.最中间的一行与最后一行之间的所有行.( 第n + 1行到第2 * n - 2行 ) { for (int j = 1; j <= i - n; j++) { cout << " "; } cout << "*"; for (int k = 1; k <= 5 * n - 2 * i - 4; k++) { cout << " "; } cout << "*"; } cout << endl; // 不要忘记换行!!! } }
-
2
这次我还加了注释哦,代码如下:
#include <iostream> using namespace std; int main()//头文件 { int n,c,h;//定义 cin >> n;//输入 c=n-1;//空格数(前) h=n+1;//空格数(后) for (int i=1;i<=n-1;i++)cout << ' '; for (int i=1;i<=n;i++)cout << '*';//完成第一行 cout << endl;//开始第二行 for (int i=1;i<=n-1;i++) { for (int k=1;k<c;k++) { cout << ' '; } cout << '*'; for (int k=1;k<h;k++) { cout << ' '; } cout << '*' << endl; c--; h+=2; }//完成上半截 c+=2; h-=4;//用来抵消c--和h+=2(上面必须加c--和h-=4) for (int i=1;i<=n-2;i++) { for (int k=1;k<c;k++) { cout << ' '; } cout << '*'; for (int k=1;k<h;k++) { cout << ' '; } cout << '*' << endl; c++; h-=2; }//完成下半截(不包括最后一行) for (int i=1;i<=n-1;i++)cout << ' '; for (int i=1;i<=n;i++)cout << '*';//完成最后一行 return 0;//好习惯!(结束) }
一共47行,敲完很累很累的!点个赞吧!求求了
-
0
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; for(int i=1;i<=n*2-1;i++) { if(i==1||i==2*n-1) { for(int j=1;j<n;j++) { cout << " "; } for(int j=1;j<=n;j++) { cout << "*"; } } else if(i<=n) { for(int j=0;j<n-i;j++) { cout << " "; } cout << "*"; for(int j=0;j<n+i+i-4;j++) { cout << " "; } cout << "*"; } else { int t=i; t=n-1-i; for(int j=1;j<=i-n;j++) { cout << " "; } cout << "*"; for(int j=0;j<n+t+t+n+n-2;j++) { cout << " "; } cout << "*"; } cout << endl; } return 0; }``` 已经AC,请放心食用。
-
0
考察知识点是for循环。
需要分步解决
代码有亿点长
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; for(int i=1;i<=n-1;i++) { cout<<" "; } for(int i=1;i<=n;i++) { cout<<"*"; } cout<<endl; for(int i=0; i<=n-2;i++) { for(int j=1;j<=n-i-2;j++) { cout<<" "; } cout<<"*"; for (int j=1;j<=n+i+i;j++) { cout<<" "; } cout << "*" << endl; } for(int i=n-3;i>=0;i--) { for (int j=1;j<=n-i-2;j++) { cout<<" "; } cout<<"*"; for(int j=1;j<=n+i+i;j++) { cout<<" "; } cout<<"*"<< endl; } for(int i=1;i<=n-1;i++) { cout<<" "; } for(int i=1;i<=n;i++) { cout<<"*"; } return 0; }
(AC过,请放心食用)
-
0
using namespace std; int main (){ int n; cin >> n; for(int o=1;o<=n-1;o++) cout << " "; for(int o=1;o<=n;o++) cout << "*"; cout <<endl; for (int p=1;p<=n-1;p++){ for (int a=1;a<=n-p-1;a++){ cout << " "; } cout << "*"; for (int q=1;q<=4*p+n;q=q+2){ cout << " "; } cout << "*"<< endl; } or (int i = n - 3; i >= 0; i--) { for (int j = 1; j <= n - i - 2; j++) cout << " "; cout << "*"; for (int j = 1; j <= n + i + i; j++) cout << " "; cout << "*" << endl; } for (int i = 1; i <= n - 1; i++) cout << " "; for (int i = 1; i <= n; i++) cout << "*"; return 0; }
-
0
非常简单
int i,j,n; cin>>n; for(i=1;i<n;i++){ cout<<" "; } for(i=1;i<=n;i++){ cout<<"*"; } cout<<endl; for(i=2;i<=n;i++){ for(j=1;j<=n-i;j++){ cout<<" "; } cout<<"*"; for(j=1;j<=n+(i-2)*2;j++){ cout<<" "; } cout<<"*"<<endl; } for(i=n-1;i>=2;i--){ for(j=1;j<=n-i;j++){ cout<<" "; } cout<<"*"; for(j=1;j<=n+(i-2)*2;j++){ cout<<" "; } cout<<"*"<<endl; } for(i=1;i<n;i++){ cout<<" "; } for(i=1;i<=n;i++){ cout<<"*"; } cout<<endl; return 0;
(本体只晒核心代码,剩下的自己去写)
-
0
该题单包含L4~L5学习内容
该题单主要考察:数组、while循环、双层for循环、函数等知识点
写题解请注意
鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
题解最好只有核心代码的展示,而不是全代码,避免有同学复制你的代码,虽然我们也会核查提交记录。(老师使用万能的python脚本调取网页日志核查,当然不是一个个看了)
抄袭题解一经发现直接取消成绩。
题解被删除的可能
1. 代码不符合格式规范
2. 没有思路讲解或者没有注释,
3. 无意义的题解
4. 题解代码可以供他人直接复制,因此这里要求大家只放核心代码。例如一道for循环求和得题目,我们只需要写好for循环的关键代码即可,定义变量这些就不需要在教给大家了。
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
-
0
超了点纲,但也不简便
前方高能
#include <iostream> using namespace std; void cout_(int n,string s=" "/*s参数默认为空格*/,string country = "Norway"/*可选参数*/){ for (int i=1;i<=n;i++){ cout<<s; } if (country=="endl") cout<<endl;//判断参数是否为endl,是就换行 } int main(){ int n; cin>>n; int s=n-1,t=0; cout_(s);cout_(n,"*","endl"); for (int i=1;i<n;i++){ cout_(s-i);cout<<"*";cout_(n+t," ");cout<<"*"<<endl;t+=2; } t-=4;//补差 for (int i=n-2;i>=1;i--){ cout_(s-i);cout<<"*";cout_(n+t," ");cout<<"*"<<endl;t-=2; } cout_(s);cout_(n,"*"); }
-
0
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n - 1; i++) //输出n-1个' '(空格)。 cout << " "; for (int i = 1; i <= n; i++) //输出顶部的'*' cout << "*"; cout << endl; //下一行 for (int i = 0; i <= n - 2; i++) //上半部分 { for (int j = 1; j <= n - i - 2; j++) cout << " "; cout << "*"; for (int j = 1; j <= n + i + i; j++) cout << " "; cout << "*" << endl; } for (int i = n - 3; i >= 0; i--) //下半部分 { for (int j = 1; j <= n - i - 2; j++) cout << " "; cout << "*"; for (int j = 1; j <= n + i + i; j++) cout << " "; cout << "*" << endl; } for (int i = 1; i <= n - 1; i++) //封底QwQ cout << " "; for (int i = 1; i <= n; i++) cout << "*"; return 0; }
-
0
#include <bits/stdc++.h> using namespace std; int main() { int i,j,n,a,m; cin>>n; for(i=1;i<=n-1;i++) cout<<" "; for(i=1;i<=n;i++) cout<<"*"; cout<<endl;//首行 for(i=1;i<=n-1;i++){ for(j=1;j<=n-i-1;j++) cout<<" "; cout<<"*"; for(j=1;j<=n+i*2-2;j++) cout<<" "; cout<<"*"; cout<<endl;//中间上行部分与最大 } for(i=n-2;i>=1;i--){ for(j=1;j<=n-i-1;j++) cout<<" "; cout<<"*"; for(j=1;j<=n+i*2-2;j++) cout<<" "; cout<<"*"; cout<<endl; }//中间下行部分 for(i=1;i<=n-1;i++) cout<<" "; for(i=1;i<=n;i++) cout<<"*"; cout<<endl;//收尾 return 0;//代码有点长,但思路不难,相信你们可以的!!! }```
-
0
#include<iostream> using namespace std; int main(){ int space,xing,lie,bian,zhong; cin>>bian; zhong = bian-2; //行数与打印中间空格数的关系 for(int i=1;i<bian;i++){ //控制1-(n-1)行打印 for(int j=1;j<=bian-i;j++){ //打印前半部分空格 cout<<" "; } if(i==1){ //第一行时没有空格 for(int k=1;k<=bian;k++){ cout<<"*"; } }else{ cout<<"*"; for(int l=1;l<=zhong+i;l++){ //第二行开始打印中间部分空格 cout<<" "; } zhong+=1; //中间空格递增 cout<<"*"; } cout<<endl; } for(int i=bian;i>=1;i--){ //控制从n-1行 for(int j=1;j<=bian-i;j++){ cout<<" "; } if(i==1){ for(int k=1;k<=bian;k++){ cout<<"*"; } }else{ cout<<"*"; for(int l=1;l<=zhong+i;l++){ cout<<" "; } zhong-=1; cout<<"*"; } cout<<endl; } return 0; }
-
0
遇见这种题目,不用慌,直接一行一行分不分拼凑,可以不用setw()函数。有的话更好可以简化代码。 上代码:
#include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; for(int i=1;i<=2*n-1;i++) { if(i<=n-1) { cout<<" "; } else { cout<<"*"; } } cout<<endl; for(int i=1;i<n;i++) { cout<<setw(n-i)<<"*"<<setw(n+2*i-1)<<"*"<<endl; } for(int i=n-2;i>0;i--) { cout<<setw(n-i)<<"*"<<setw(n+2*i-1)<<"*"<<endl; } for(int i=1;i<=2*n-1;i++) { if(i<=n-1) { cout<<" "; } else { cout<<"*"; } } return 0; }
-
0
我二话不说,直接上代码!!!
#include <bits/stdc++.h> using namespace std; int n,a,b; int main() { cin>>n; a=n-1; b=n; for(int i=1;i<=a;i++)//输出空格 { cout<<" "; } for(int i=1;i<=n;i++)//输出*号 { cout<<"*"; } cout<<endl; for(int i=1;i<=n-1;i++) { a--; for(int j=1;j<=a;j++)//输出空格 { cout<<" "; } cout<<"*"; for(int j=1;j<=b;j++)//输出*号 { cout<<" "; } cout<<"*"; b+=2; cout<<endl; } b-=4; for(int i=1;i<=n-2;i++)//再次循环 { a++; for(int j=1;j<=a;j++)//输出空格 { cout<<" "; } cout<<"*"; for(int j=1;j<=b;j++)//输出空格 { cout<<" "; } cout<<"*"; b-=2; cout<<endl; } for(int i=1;i<=n-1;i++)//输出空格 { cout<<" "; } for(int i=1;i<=n;i++)//输出*号 { cout<<"*"; } return 0; }
-
-1
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n - 1; i++) { cout << " "; } for (int i = 1; i <= n; i++) { cout << ""; } cout << endl; for (int i = 0; i <= n - 2; i++) { for (int j = 1; j <= n - i - 2; j++) { cout << " "; } cout << ""; for (int j = 1; j <= n + i + i; j++) { cout << " "; } cout << "" << endl; } for (int i = n - 3; i >= 0; i--) { for (int j = 1; j <= n - i - 2; j++) { cout << " "; } cout << ""; for (int j = 1; j <= n + i + i; j++) { cout << " "; } cout << "" << endl; } for (int i = 1; i <= n - 1; i++) { cout << " "; } for (int i = 1; i <= n; i++) { cout << ""; } return 0; } 给个赞吧!👍🎉️ 🎉️
-
-1
#include<iostream> using namespace std; int main(){ int space,xing,lie,bian,zhong; cin>>bian; zhong = bian-2; for(int i=1;i<bian;i++){ for(int j=1;j<=bian-i;j++){ cout<<" "; } if(i==1){ for(int k=1;k<=bian;k++){ cout<<"*"; } }else{ cout<<"*"; for(int l=1;l<=zhong+i;l++){ cout<<" "; } zhong+=1; cout<<"*"; } cout<<endl; } for(int i=bian;i>=1;i--){ for(int j=1;j<=bian-i;j++){ cout<<" "; } if(i==1){ for(int k=1;k<=bian;k++){ cout<<"*"; } }else{ cout<<"*"; for(int l=1;l<=zhong+i;l++){ cout<<" "; } zhong-=1; cout<<"*"; } cout<<endl; } return 0; }
-
-1
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n - 1; i++) cout << " "; for (int i = 1; i <= n; i++) cout << "*"; cout << endl; for (int i = 0; i <= n - 2; i++) { for (int j = 1; j <= n - i - 2; j++) cout << " "; cout << "*"; for (int j = 1; j <= n + i + i; j++) cout << " "; cout << "*" << endl; } for (int i = n - 3; i >= 0; i--) { for (int j = 1; j <= n - i - 2; j++) cout << " "; cout << "*"; for (int j = 1; j <= n + i + i; j++) cout << " "; cout << "*" << endl; } for (int i = 1; i <= n - 1; i++) cout << " "; for (int i = 1; i <= n; i++) cout << "*"; }
信息
- ID
- 3
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 6
- 标签
- 递交数
- 1509
- 已通过
- 783
- 上传者