一、求2+22+222+2222+…+22…(n个2)…22(精确计算)
#include <iostream>
using namespace std;
int main()
{
int n, a[100]{}, b[100]{}, c;
while (1)
{
cout << endl << "请输入N的值:";
cin >> n;
c = n;//保留n原始值
for (; n > 0; n--)
{
for (int i = n - 1; i >= 0; i--)//加数赋值
b[i] = 2;
for (int i = n - 1; i >= 0; i--)
{
a[i] += b[i];//逐位相加
while (a[i] > 9)//while确保某一位小于10
{
a[i] -= 10;
a[i + 1]++;//进位
}
}
}
cout << "精确计算的值为 : ";
for (int i = c - 1; i >= 0; i--)//输出结果
{
cout << a[i];
a[i] = 0;//用于继续测试,数组回到初始状态
}
}
}
运行图:
二、编写一个算法,其功能是给一维数组a输入任意6个整数,假设为5,7,4,8,9,1,然后建立一个具有如图 3-4 所示的方阵,并打印出来(屏幕输出)。
#include <iostream>
using namespace std;
int main()
{
int a[20]{}, n;
while (1)
{
cout << "请输入要输入的整数数量(<20) : ";
cin >> n;
cout << "请输入" << n << "个数字(逐一输入或空格间断) : " << endl;//cin的特性:空格间断
for (int i = 0; i < n; i++)
{
cout << "No ." << i + 1 << " :";
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";//输出数组
}
cout << endl;
int temp = a[n - 1];//取出末尾的值
for (int i = n - 1; i >= 0; i--)//循环从后往前,给后面的数赋前面的值
{
if (i != 0)//当i=0时直接给末尾赋值
a[i] = a[i - 1];
else
a[i] = temp;
}
}
}
}
运行图:
三、编程打印形如图 3-5 所示的n×n方阵。
#include <iostream>
using namespace std;
int main()
{
int i, j, n, k = 1, a[20][20];
while (1)
{
cout << "请输入矩阵的边长 : ";
cin >> n;
for (i = 0; i < n / 2; i++)//计算出环的总数
{
for (j = i; j < n - i - 1; j++)
a[i][j] = k++;//矩阵第一部分:上方
for (j = i; j < n - i - 1; j++)
a[j][n - i - 1] = k++;//矩阵第二部分:右边
for (j = n - i - 1; j > i; j--)
a[n - i - 1][j] = k++;//矩阵第三部分:下方
for (j = n - i - 1; j > i; j--)
a[j][i] = k++;//矩阵第四部分:左边
}
if (n % 2 != 0)//当边长为奇数时,给正中间单独的一个数赋值
a[(n - 1) / 2][(n - 1) / 2] = n * n;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
cout << a[i][j] << "\t";//输出结果
}
cout << endl << endl << endl << endl;
}
}
}
运行图:
四、编程打印形如图 3-6 所示的n×n方阵的上三角阵。
#include <iostream>
using namespace std;
int main()
{
int i, n, a[20][20], k, temp2 = 0, x, y;
while (1)
{
for (x = 0; x <= 19; x++)
for (y = 0; y <= 19; y++)
a[x][y] = 0;//数组所有值初始化为0
k = 1;//k值重置,用于再次输出三角形
cout << "请输入上三角形上方的边长 : ";
cin >> n;
for (i = 0; i < n; i++)
{
a[i][0] = k++;//环的第一个数据
for (int temp1 = i; temp1 > 0;)//temp1的操作在for循环中会导致temp1的值过早或过晚的改变
{
a[--temp1][++temp2] = k++;//所以把temp1的递减操作放到了循环里面
}
temp2 = 0;//每次使用完temp2后重置temp2的值用于下个环使用
}
for (x = 0; x < n; x++)
{
for (y = 0; y < n; y++)
{
if (a[x][y] != 0)//初始化所有值默认为0,而正常运行时不会出现0,所以排除0的数据
cout << a[x][y] << "\t";
}
cout << endl << endl << endl;
}
}
}
运行图:
五、编写程序打印形如图 3-7 和图 3-8 所示的 n×n 方阵。
#include <iostream>
using namespace std;
int main()
{
int i, j, r, n, a[50][50]{};//C++的{}初始化更简便
while (1)
{
cout << "请输入矩阵的边长 : ";
cin >> n;
r = n / 2;//求出环数(不包括只有一个数字的环)
for (i = 0; i < r; i++)
{
for (j = i; j < n - i - 1; j++)//上方
a[i][j] = i + 1;
for (j = i; j < n - i - 1; j++)//右边
a[j][n - i - 1] = i + 1;
for (j = n - i - 1; j > i; j--)//下方
a[n - i - 1][j] = i + 1;
for (j = n - i - 1; j > i; j--)//左边
a[j][i] = i + 1;
}
if (n % 2 != 0)//矩阵边长为奇数时触发
a[(n + 1) / 2 - 1][(n + 1) / 2 - 1] = r + 1;//中心点赋值
for (int x = 0; x < n; x++)
{
for (int y = 0; y < n; y++)
{
cout << a[x][y] << "\t";//输出结果
}
cout << endl << endl << endl << endl;
}
}
}
运行图: