目录
今天修改的,问了chatGPT,但是它的代码有许多问题,我修改了一些,测试点全过!
昨天记录的,一手源码。
记录一下,
最后一个测试点没过
,将代码发出来,方便大家学习借鉴和指出问题,同时会更新记录。
如果有各位大佬可以指出问题将不胜感激。
以下是一手代码,未参考过任何:
#include<iostream>
using namespace std;
int main() {
int N, const_num, i, j = 0;
int const_last_num = 1, temp;
char sign;
int record_i, record_j;
cin >> N >> sign;
if (N == 0) { //特殊情况1
return 0;
}
if(N<7){ //特殊情况2
cout<<sign<<endl;
cout<<N-1;
return 0;
}
//计算能够输出的量,i为次数
for (i = 0, const_num = 1; const_num+2 < N / 2; i++) {
const_last_num += 2;
const_num += const_last_num;
}
record_i = i; record_j = 0; //提前赋值
while (i >= 0) { //从最大打印到1
for (j = record_j; j > 0; j--) {
cout << " ";
}
for (temp = const_last_num; temp > 0; temp--) {
cout << sign;
}
cout << endl;
record_j++; const_last_num -= 2; i--;
}
i = record_i-1; //为从1打印到最大做准备
record_j-=2;
const_last_num = 3;
while (i >= 0) { //从1打印到最大
for (j = record_j; j > 0; j--) {
cout << " ";
}
for (temp = const_last_num; temp > 0; temp--) {
cout << sign;
}
cout << endl;
record_j--; const_last_num += 2; i--;
}
//打印剩余个数
cout << (N-(const_num-1)*2-1) << endl;
return 0;
}
今天修改的,问了chatGPT,但是它的代码有许多问题,我修改了一些,测试点全过!
先上chat的代码:
#include <iostream>
using namespace std;
int main() {
int n, num = 1, sum = 0;
char c;
cin >> n >> c;
// 处理输入为0的情况
if (n == 0) {
cout << 0 << endl;
return 0;
}
// 处理沙漏形状不足6行的情况
if (n < 7) {
for (int i = 0; i < n; i++) {
cout << c;
}
cout << endl << 0 << endl;
return 0;
}
// 计算沙漏形状的层数和每层的符号数量
while (sum + 2 * num <= n) {
sum += 2 * num;
num += 2;
}
num -= 2;
// 输出沙漏形状
int k = 0;
for (int i = num; i >= 1; i -= 2) {
for (int j = 0; j < k; j++) {
cout << " ";
}
for (int j = 0; j < i; j++) {
cout << c;
}
cout << endl;
k++;
}
k -= 2;
for (int i = 3; i <= num; i += 2) {
for (int j = 0; j < k; j++) {
cout << " ";
}
for (int j = 0; j < i; j++) {
cout << c;
}
cout << endl;
k--;
}
// 输出剩余符号数量
int remain = n - sum - num;
cout << remain << endl;
return 0;
}
思路很清晰不过有一些问题。
我修改后的代码:
#include <iostream>
using namespace std;
int main() {
int n, num = 1, sum = 1;
char c;
cin >> n >> c;
// 处理输入为0的情况
if (n == 0) {
cout << 0 << endl;
return 0;
}
// 处理沙漏形状不足6行的情况
if (n < 7) {
cout<<c;
cout << endl << n-1;
return 0;
}
// 计算沙漏形状的层数和每层的符号数量
while (sum + 2 * num <= n) {
if(num!=1){
sum += 2 * num;
}
num += 2;
}
num -= 2;
// 输出沙漏形状
int k = 0;int j;
for (int i = num; i >= 1; i -= 2) {
for (j = 0; j < k; j++) {
cout << " ";
}
for (j = 0; j < i; j++) {
cout << c;
}
cout << endl;
k++;
}
k -= 2;
for (int i = 3; i <= num; i += 2) {
for (j = 0; j < k; j++) {
cout << " ";
}
for (j = 0; j < i; j++) {
cout << c;
}
cout << endl;
k--;
}
// 输出剩余符号数量
int remain = n - sum;
cout << remain << endl;
return 0;
}
测试点:
版权声明:本文为yudui666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。