首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个循环语句的练习题,敢不敢和小弟我较量一下。小弟我想知道有没有更简单的算法

2012-04-02 
一个循环语句的练习题,敢不敢和我较量一下。我想知道有没有更简单的算法。题目如下:编写一个程序,它能够读入

一个循环语句的练习题,敢不敢和我较量一下。我想知道有没有更简单的算法。
题目如下:
编写一个程序,它能够读入一个正方形的边长,然后输出一个有星号和空格组成的、边长为刚刚读入边长的空心正方形。该程序应可以处理边长在1-20之间的所有正方形。例如,程序读入的边长是5,那么它应输出如下的空心正方形:
*****
* *
* *
* *
*****
下面是我写的代码,大致思路是:用到两个嵌套的while语句,外层语句负责打印第一列和最后一列星号以及换行。里层语句负责打印其他星号和空格。由于边长为1时比较特殊,所以单列出来。
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

int main()
{
  int b,I,i;//分别声明正方形边长变量b,和两个计数变量

  cout << "请输入正方形的边长(1-20)" << endl;
  cin >> b;
  //有效性确认
  while ( b < 1 )
  {
  cout << "非法输入,请重新输入!";
  cin >> b;
  }
  while ( b > 20 )
  {
  cout << "非法输入,请重新输入!";
  cin >> b;
  }
  //当边长为1时
  if ( b == 1 )
  {
  cout << "*" << endl;
  return 0;
  }
  //嵌套的循环
  I = b;
  while ( I >= 1 )
  {
  cout << "*";//打印第一列星号
  i = b;
  while ( i >= 3 )
  {
  //第一行和最后一行打印星号,其余行打印空格
  if ( I == b )
  cout << "*";
  else if ( I == 1 )
  cout << "*";
  else
  cout << " ";
  i--;
  }
  cout << "*" << endl;//打印最后一列星号并换行
  I--;
  }
  return 0;
}

[解决办法]

C/C++ code
#include <iostream>using namespace std;int main(){    int n;    cin >> n;    if (n==1)    {        cout << "*" << endl;        return 0;    }    else    {        int i,j;        for (j=1;j<=n;j++)            cout << "*";        cout << endl;        for (i=2;i<=n-1;i++)        {            cout << "*";            for (j=2;j<=n-1;j++)                cout << " ";            cout << "*";            cout << endl;        }        for (j=1;j<=n;j++)            cout << "*";        cout << endl;        return 0;    }}
[解决办法]
好吧,算我欺负你
C/C++ code
#include "stdafx.h"#include <iostream>int _tmain(int argc, _TCHAR* argv[]){    int length = 0;    std::cin >> length;    char *buff = new char[length + 1];    buff[length] = 0;    memset(buff, '*', length);    std::cout << buff << std::endl;    memset(buff + 1, ' ', length -2);    for (int index = 0; index < length - 2 ; ++index)    {        std::cout << buff << std::endl;    }    memset(buff, '*', length);    std::cout << buff << std::endl;    system("pause");    return 0;}
[解决办法]
for(int y=0;y<len;y++)
{
 for(int x=0;x<len+1;x++)
 {
if(x==len+1) cout<<"\n"
else if(x==y && x!=1 && x!=len) cout<<" ";
else cout<<"*"
}
}
//当然容易命中的条件应该放于优先处,先判"*"的再判" "的再"\n"的
//足见代码长度和效率是两回事

热点排行