C++day16(l练习题)
打印倒直角三角形
【描述】使用嵌套循环编写一个程序,输出一个倒直角三角形字符图形,能够根据输入的数字,打印对应的图形大小。
【输入描述】输入一个数字n,0<n≤30
【输出描述】输出对应字符图案
【样例输入】 5
【样例输出】
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=n;i>=1;i--)
{
for(int j=1;j<=i;j++)
{
cout<<"*";
}
cout<<endl;
}
return 0;
}
百钱买百鸡
【描述】百钱买百鸡问题:3文钱可以买1只公鸡,2文钱可以买1只母鸡,1文钱可以买3只小鸡,要用100文钱买100只鸡,求公鸡,母鸡,小鸡各多少只?
【输入描述】无。
【输出描述】第一行分别输出公鸡,母鸡,小鸡,按每个词语占5个字符的宽度。接着输出各种公鸡、母鸡、小鸡的数量,依次由小到大,每种情况各占一行,并每个整数占5个字符的宽度。
【样例输入】 无
【样例输出】
5 32 63
10 24 66
15 16 69
20 8 72
解析及伪代码:
1、公鸡+母鸡+小鸡=100只
g+m+x=100
2、买公鸡的钱+买母鸡的钱+买小鸡的钱=100文
g3+m3+x*/3.0
这里要注意,x是整型,3也是整型,结果定会有小数,所以3.0是浮点,结果也会是浮点型。
运用枚举法:
- 逻辑简单直观,无需复杂推理,直接通过 “罗列” 找结果。
- 适用场景明确,多用于候选范围有限、可量化的问题(如计数、筛选、验证)。
- 关键原则是 “不重不漏”,需要按固定顺序(如从小到大、从左到右)列举,避免出错。
典型应用
- 基础计数:比如计算 1-10 中偶数的个数,直接列举 2、4、6、8、10 即可。
- 组合问题:如从 3 个元素中选 2 个的所有组合,逐一列出所有配对情况。
- 验证答案:比如判断某个数是否为质数,列举其所有可能因数进行验证。
局限与注意
- 效率较低,候选范围过大时(如 1-100000 的偶数计数),手动枚举耗时耗力。
- 需结合场景优化,复杂问题中可搭配 “分类枚举”“排除法” 减少无效列举。
第一种方法
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main()
{
int g,m,x;
//cout<<setw(5)<<"公鸡"<<setw(5)<<"母鸡"<<setw(5)<<"小鸡"<<endl;
for(g=0;g<=100;g++) //枚举公鸡的数量
{
for(m=0;m<=100;m++) //母鸡的数量
{
for(x=0;x<=100;x++)//小鸡的数量
{
if(g+m+x==100 && g*3+m*3+x/3.0==100 && x%3==0)
cout<<setw(5)<<g<<setw(5)<<m<<setw(5)<<x<<endl;
}
}
}
return 0;
}
注意:这里面有个问题,每只鸡最少占一只
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main()
{
int g,m,x;
//cout<<setw(5)<<"公鸡"<<setw(5)<<"母鸡"<<setw(5)<<"小鸡"<<endl;
for(g=1;g<=100/3.0;g++) //枚举公鸡的数量
{
for(m=1;m<=100/2;m++) //母鸡的数量
{
for(x=1;x<=3*100;x++)//小鸡的数量
{
if(g+m+x==100 && g*3+m*2+x/3.0==100 && x%3==0)
cout<<setw(5)<<g<<setw(5)<<m<<setw(5)<<x<<endl;
}
}
}
return 0;
}
求阶乘的和
【描述】给定正整数n,求不大于n的正整数的阶乘的和(即求1!+2!+3!+…+n!),输出阶乘的和。
【输入描述】输入有一行,包含一个正整数n(1 < n < 12)。
【输出描述】输出有一行:阶乘的和。
【样例输入】 5
【样例输出】 153
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main()
{
int n,m=1,sum=0;
cin>>n;
if(n>1 && n<12)
{
for(int i=1;i<=n;i++)
{
m=1;
for(int j=1;j<=i;j++)
{
m*=j;
}
sum+=m;
}
cout<<sum;
}
else
cout<<"请输入正确范围"<<endl;
return 0;
}
#include<bits/stdc++.h>
*#include <bits/stdc++.h>* 是 C++ 中的一个非标准头文件,通常在竞赛编程中使用。它几乎包含了所有的 C++ 标准库头文件,因此在编写竞赛代码时可以节省输入和包含头文件的时间。
打印倒直角三角形
【描述】如果一个正整数,它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数。现求所有小于等于n(n<100)与7无关的正整数的平方和
【输入描述】输入为一行,正整数n(n < 100)。
【输出描述】输出一行,包含一个整数,即小于等于n的所有与7无关的正整数的平方和。
【样例输入】 21
【样例输出】2336
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main()
{
int n,y;
cin>>n;
for(int i=1;i<=n;i++)
{
if(i%7!=0 and i%10!=7 and i/10!=7)
{
y=y+i*i;
}
}
cout<<y;
return 0;
}
合数分解质因数
【描述】把一个合数分解成若干个质因数乘积的形式叫做分解质因数,分解质因数只针对合数
【输入描述】如输入一个合数36
【输出描述】输出分解结果 36=2×2×3×3
【样例输入】 36
【样例输出】 36=2×2×3×3
#include<iostream>
using namespace std;
int main()
{
int n,i=2;
cin>>n;
cout<<n<<"=";
do{
while(n%i==0)
{
cout<<i;
n/=i;
if(n!=1) cout<<"*";
}
i++;
}while(n!=1);
return 0;
}
打印空心矩形
【描述】使用嵌套循环编写一个程序,输出一个矩形的长与宽,打印输出这个大小的空心矩形。
【输入描述】两个数,表示矩形的长与宽
【输出描述】输出该大小的空心矩形
【样例输入】 5 5
【样例输出】
#include<iostream>
using namespace std;
int main()
{
int height,width;
cin>>height>>width;//输入矩形的宽度、长度
//上边框
for(int j=0;j<height;j++)
{
cout<<"*";
}
cout<<endl;
if(width!=1)//矩形的宽度不为1
{
for(int i=1;i<width-1;i++)
{
cout<<"*";
for(int j=1;j<width-1;j++)
{
cout<<" ";
}
cout<<"*"<<endl;
}
}
else//矩形宽度为1时
{
for(int i=1;i<height-1;i++)
{
for(int j=1;j<width-1;j++)
{
cout<<" ";
}
cout<<"*"<<endl;
}
}
//下边框
if(height>1)
{
for(int j=0;j<width;j++)
{
cout<<"*";
}
cout<<endl;
}
return 0;
}
数字金字塔
【描述】使用嵌套循环编写一个程序,能够打印一个数字金字塔,金字塔塔顶从数字1开始,往下依次按照1-9的数字排列,如果超出数字9则重新从数字0开始直到数字9,以此类推。
【输入描述】输入为一行,正整数n(n < 100)。
【输出描述】输出金字塔形状
【样例输入】 15
【样例输出】
1
123
12345
1234567
123456789
12345678901
1234567890123
123456789012345
12345678901234567
1234567890123456789
123456789012345678901
12345678901234567890123
1234567890123456789012345
123456789012345678901234567
12345678901234567890123456789
#include <iostream>
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 << j % 10;
}
cout << endl;
}
return 0;
}
打印乘法表(带格式控制)
【描述】使用嵌套循环编写一个程序,能够打印一个简易的乘法表,乘法表类似于倒三角形。
【输入描述】输入一个数,表示乘法表的大小
【输出描述】输出该大小的乘法表
【样例输入】6
【样例输出】
1 1 2 3 4 5 6
2 2 4 6 8 10 12
3 3 6 9 12 15 18
4 4 8 12 16 20 24
5 5 10 15 20 25 30
6 6 12 18 24 30 36
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int n;
cin >> n;//请输入乘法表的大小
// 计算最大数字的宽度
int max_width = to_string(n * n).length() + 1;
// 打印上三角矩阵
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
// 打印行标签
if (j == 1)
{
cout << setw(max_width) << i;
}
// 打印乘积
cout << " " << setw(max_width - 1) << i * j;
}
cout << endl;
}
return 0;
}
更多推荐


所有评论(0)