三、编程题(每题 25 分,共 50 分) 1、⼩杨的 X 字矩阵 问题描述 ⼩杨想要构造⼀个 N×N 的 X 字矩阵(N 为奇数),这个矩阵的两条对角线都是半角加号+,其余都是半角减号-。例如,⼀个 5×5 的 X 字矩阵如下: +---+
-+-+-
--+--
-+-+-
+---+
请你帮⼩杨根据给定的 N 打印出对应的“X 字矩阵”。 输入描述 ⼀⾏⼀个整数 N(5≤N≤49,保证 N 为奇数)。 输出描述 输出对应的“X 字矩阵”。 请严格按格式要求输出,不要擅⾃添加任何空格、标点、空⾏等任何符号。你应该恰好输出 N⾏,每⾏除了换⾏符外恰好包含 N 个字符,这些字符要么是+,要么是-。 样例输入 1 5
样例输出 1 +---+
-+-+-
--+--
-+-+-
+---+
样例输入 2 7
样例输出 2 +-----+
-+---+-
--+-+--
---+---
--+-+--
-+---+-
+-----+
【题目大意】 输入一个 N*N 的矩阵,内容是“+”或者“-”字符,注意N 是一个奇数。注意对角线和斜对角线是“+”。 【考纲知识点】 多层循环结构、基本运算、输入输出语句。 【解题思路】 1.按题目要求定义好需要的变量,并实现输入; 2.最开始所有位置的坐标都设置是“-”字符; 3.对角线坐标是(1,1),(2,2),(3,3)….(n,n);斜对角线是(1,n),(2,n-1),(3,n-2)…..(n,1)。总结规律:需要赋值“+”的坐标是行坐标 i=列坐标 j;斜对角线的坐标和都是n+1;行坐标是 i,纵坐标是 n+1-i,分别赋值即可。 【参考程序】 #include <iostream>
using namespace std;
int main(){
int n=0;
cin >>n;
for(inti=0; i<n; i++){
for(intj=0; j<n;j++){
if(i==j || i+j== n-1){
cout<<"+";
}else{
cout<<"-";
}
}
cout<< endl;
}
return 0;
}
2、数字⿊洞 问题描述 给定⼀个三位数,要求各位不能相同。例如,352 是符合要求的,112 是不符合要求的。将这个三位数的三个数字重新排列,得到的最⼤的数,减去得到的最⼩的数,形成⼀个新的三位数。对这个新的三位数可以重复上述过程。神奇的是,最终⼀定会得到 495! 试试看,重新排列 352,得到的最⼤数为 532,最⼩数为235,它们的差是297;变换 297,得到 972-279=693;变换 693,963-369=594;变换594,954-459=495。因此,352 经过 4 次变换得到了 495。 现在,输⼊的三位数,你能通过编程得出,这个三位数经过多少次变换能够得到495 吗? 输入描述 输⼊⼀⾏,包含⼀个符合要求的三位数 。 输出描述 输出⼀⾏,包含⼀个整数 ,表⽰经过 次变换得到 。 样例输入 1 352
样例输出 1 4
【题目大意】 输入 1 个三位整数,将该数字拆分,重新组合成最大数字和最小数字,求他们的差,如果不等于 495,就一直操作,直到等于 495 为止。求操作的次数。 【考纲知识点】 循环结构、分支结构、基本运算。 【解题思路】 1.按题目要求定义好需要的变量,并实现输入; 2.将该数字的个位十位百位拆分开,组成最大值和最小值;判断是否等于495,记录操作次数。 【参考程序】 #include <iostream>
using namespace std;
int main(){
int n=0;
cin >> n;
for(int t=0; ;t++){
if(n==495){
cout<<t<<endl;
break;
}
int m0 = n%10, m1=n/10%10 , m2=n/100;
int tmax = 0, tmin=0;
if( m0 >= m1 && m1 >= m2)
{
tmax = m0 * 100 + m1*10 + m2;
tmin = m2 * 100 + m1*10 + m0;
}else if(m0 >= m2 && m2>=m1){
tmax = m0 * 100 + m2*10 + m1;
tmin = m1 * 100 + m2*10 + m0;
}else if(m1 >= m0 && m0 >= m2){
tmax = m1 * 100 + m0*10 + m2;
tmin = m2 * 100 + m0*10 + m1;
}else if(m1 > =m2 && m2 >= m0){
tmax = m1*100 + m2*10 + m0;
tmin = m0*100 + m2*10 + m1;
}else if(m2>=m0&&mo >= m1){
tmax = m2*100 + m0*10 + m1;
tmin = m1*100 + m0*10 + m2;
else{ //m2>=m1 && m1 >= mo
tmax = m2*100 + m1*10 + m0;
tmin = m0*100 + m1*10 + m2;
}
n = tmax - tmin;
}
return 0;
}
tmin=mO*100+m1 *10 + m2;
(责任编辑:lizq) |