为了账号安全,请及时绑定邮箱和手机立即绑定

C++小题目,有没有会做的?

C++小题目,有没有会做的?

C++
天将明96 2017-08-16 17:35:44
C++小题目问题描述:输入:一个任意整数N(0<N<20)输出:首先打印整数N和冒号并换行;然后打印N*N的“*”符号的矩阵,如下面两幅图:特殊要求:代码中不许用到任何循环语句(for, while, do while等),也不许使用条件分支语句(if, switch 等)提示:没有任何提示!  <(▰˘◡˘▰)>优先采纳最简单的解决方法(使用的函数越少,引用的库越少即为简单)   最好附上你们的代码哟 (。・`ω´・)------------------------------------------------------------------------------------------------------------                  分割线                ------------------------------------------------------------------------------------------------------------我自己的答案:    C++是面向对象的语言,解决问题时,我们应该用面向对象的思想来思考。    分析题目要求,输入整数N,要输出N*N的“*”矩阵,平时我们可以用循环很简单地解决这个问题,但是这种方法是面向过程的,这样解决问题和C语言没有什么区别了。    为了利用C++面向对象的特性,我们可以将每一行“**……**\n”视为一个对象,这些相同的对象属于同一个Row类,所以输出N行字符就是创建N个Row类的对象;在每一行中,又有N个“*”,我们还是可以将其视为对象,让它们属于Star类。每创建一个Row类对象时,就相当于创建了N个Star类对象(加上一个 '\n')。代码实现:#include <iostream> using namespace std; int n = 0; class Star{ public:     Star(){cout << "*";} }; class Row{ public:     Row() {         Star star[n];         cout << endl;     } }; int main() {     cout << "Input a number :";     cin >> n;     cout << n << ":" << endl;     Row row[n];     return 0; }面向对象思想使代码开发模块化,更易维护和修改。增强代码的可靠性和灵活性。增加代码的可理解性。以上是我的愚见,有不对的地方还请大家指教!(●'◡'●)ノ♥
查看完整描述

3 回答

已采纳
?
fatewa

TA贡献40条经验 获得超8个赞

#include<iostream>
using namespace std;
int row(int n){
    cout<<'*';
    n = n -1;
  return n==0?0:row(n);
}

int Print(int n,int count){
        row(count);
        cout<<endl;
        n =  n - 1;
        return n==0?0:Print(n,count);
}
 
int main(void){
    int n = 0;
    cout<<"Input a number :";
    cin>>n;
    cout<<n<<":"<<endl;
    Print(n,n);
    return 0;
}

就是这个咯 最简单的实现 数组也免了

//img1.sycdn.imooc.com//599461dc0001669d02320155.jpg

查看完整回答
1 反对 回复 2017-08-16
?
fatewa

TA贡献40条经验 获得超8个赞

二维数组可以做但是不用循环代码量扎心

查看完整回答
反对 回复 2017-08-16
  • 天将明96
    天将明96
    可不可以写下你的实现方法呢?(。◕ˇ∀ˇ◕)
  • fatewa
    fatewa
    说下思路吧 你可以定义一个一维数组然后根据n的大小用memset全部设置为'*',再通过三目运算符对n进行判断 定义一个函数用来输出一行星号 内容大概是这样 void Print(){ count<<(Array[0]=='*'?':' ') <<(Array[1]=='*'?':' ') <<(Array[2]=='*'?':' ') .... <<(Array[19]=='*'?':' ') <<endl; //因为最多不超过20个 } 然后在通过判断n的大小决定Print的运行次数 n==1?one():n==2?two():n==3?three().....:n==19?nineteen():""; 然后one two 这些函数里放执行Print函数的对应数量数量
  • fatewa
    fatewa
    代码量会很多但是这样不需要引入库
点击展开后面2
?
什么鬼_呀你

TA贡献46条经验 获得超35个赞

memset函数

查看完整回答
反对 回复 2017-08-16
  • 天将明96
    天将明96
    可不可以写下你的实现方法呢?(。◕ˇ∀ˇ◕)
  • 什么鬼_呀你
    什么鬼_呀你
    额,思路是:创建方法1,利用meset创建一个一维数组的; 创建方法2,利用函数的递归或递进打印一维数组(调用方法1);最后创建main()方法,调用方法2
  • 3 回答
  • 3 关注
  • 2235 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信