假期刷题打卡--Day25

1、MT1204字母三角

请编写一个简单程序,输入正整数n,输出n行F字三角

格式

输入格式:

输入整型

输出格式:

输出n行F字三角

样例 1

输入:

5

输出:

F  
FFF  
FFFFF  
FFFFFFF  
FFFFFFFFF
分析过程

使用双重循环,内层输出2*i-1(即1、3、5、7、9),然后在内层循环结束后,输出一个换行符。

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,count=0;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=(2*i-1);j++){
            cout << "F" ;
        }cout << "\n";
    }
    return 0;
}

这些题目真的太考验找规律的能力了。下面的这个题也是一样的。

2、MT1206金字塔

请编写一个简单程序,输入正整数n,输出n行W字金字塔

格式

输入格式:

输入整型

输出格式:

输出n行W字金字塔

样例 1

输入:

3

输出:

  W  
 WWW  
WWWWW 
分析过程

以前学的时候,见过这个题目,但是却从来没有亲手分析过,也没有思考过,在这次看到题目的时候,第一反应是使用setw() 函数进行设置空格的宽度,然后使用一个函数输出W的个数,W的个数和前面的一道题的规律是相等的,是2*i-1,但是在本题要注意的是,此次调用的函数实在循环里面的,所以是将双重循环分开写了,所以在子函数中不需要再写双重循环了,只需要写上面一道题目的内层循环。

按照上述思路,写了如下的代码,成功通过所有用例。

实现代码
#include<bits/stdc++.h> 

using namespace std;

void p(int a){
    // for(int i=1;i<=a;i++){
        for(int j=1;j<=(2*a-1);j++){
            cout << "W";
        }
    // }
}
int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        if(n!=i){
    // cout << setw(5) << left << 455 << " " << setw(5) << right << 455 << endl ; 使用不熟练,对照看的
            cout <<setw(n-i) <<left<< " ";
            p(i);
            cout <<setw(n-i) << right <<" "<< endl ;
        }else{
            p(i);
        }  

    }
    return 0;
}

今天看到这个题目的时候,觉得可以使用setw()函数,但是依然不确定使用的顺序,所以这里再记一下吧,虽然可能还是回望,但是慢慢使用,慢慢记忆吧~

cout << setw()函数 << left/right << 输出内容  (记忆方法:宽度方向内容

 使用自己的方法解决之后,就去评论区看了一下别人的思路:直接使用三个four循环解决,在输出空格的for循环中,循环的条件与setw()函数使用的条件是一样的。按照常见的思路,写出代码如下:

#include<bits/stdc++.h> 

using namespace std;

int main(){
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n-i;j++){
            cout << " ";
        }
        for(int j=1;j<=2*i-1;j++){
            cout << "W";
        }cout << endl;
    }

    return 0;
}

3、MT1207倒金字塔

请编写一个简单程序,输入正整数n,输出n行W字金字塔。(第一行左边不空格)

格式

输入格式:

输入整型

输出格式:

输出n行W字倒金字塔

样例 1

输入:

5

输出:

W W W W W  
 W W W W  
  W W W  
   W W  
    W
解决思路

本题的解决思路和上面的题目思路相同,唯一不同的就是for循环外层循环,金字塔就按照顺序输出(i++),倒金字塔就是按照逆序输出(i--)。

同样这个题目我按照两种方法解决,写出的代码如下:

实现代码

法一:使用setw()函数解决:
 

#include<bits/stdc++.h> 

using namespace std;

void p(int a){
    for(int i=1;i<=a;i++){
        cout << "W ";
    }
}
int main( )
{
    int n;
    cin >> n;
    for(int i=n;i>=1;i--){
        if(n!=i){
            cout << setw(n-i) << left << " ";
            p(i);
            cout << setw(n-i) << right << " " << endl;
        }else{
            p(i);
            cout << endl;
        }

    }
    return 0;
}

法二:使用三个for循环解决:

#include<bits/stdc++.h> 

using namespace std;

int main(){
    int n;
    cin >> n;
    for(int i=n;i>=1;i--){
        for(int j=1;j<=n-i;j++){
            cout << " ";
        }
        for(int j=1;j<=i;j++){
            cout << "W ";
        }cout << endl;
    }
    return 0;
}

4、MT1208菱形

请编写一个简单程序,输入正整数n,输出n行W字菱形。

格式

输入格式:

输入整型

输出格式:

输出W字菱形

样例 1

输入:

5

输出:

    W  
   W W  
  W W W  
 W W W W  
W W W W W  
 W W W W  
  W W W  
   W W
    W
分析过程

本题的第一种解决方法是将上面两个题结合起来,然后分别输出。

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main(){
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n-i;j++){
            cout << " ";
        }
        for(int j=1;j<=i;j++){
            cout << "W ";
        }cout << endl;
    }
    for(int i=n-1;i>=1;i--){
        for(int j=1;j<=n-i;j++){
            cout << " ";
        }
        for(int j=1;j<=i;j++){
            cout << "W ";
        }cout << endl;
    }

    return 0;
}

5、MT1211给定数字的乘法表

输出给定数字N的乘法表。

格式

输入格式:

输入为整型

输出格式:

输出为整型,空格分隔

样例 1

输入:

9

输出:

9 18 27 36 45 54 63 72 81
本题注意点

本题要求输出的是乘法表,可以对比九九乘法表,最大值应该是*9,而不是*n,即循环条件应该<=9,而不是<=n。

如果不注意这个点,就会出错:(错误的一个是<=n,正确的是<=9)

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<=9;i++){
        cout << i*n << " ";
    }
    return 0;
}

明天继续吧。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值