打印倒直角三角形

【描述】使用嵌套循环编写一个程序,输出一个倒直角三角形字符图形,能够根据输入的数字,打印对应的图形大小。
【输入描述】输入一个数字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. 基础计数:比如计算 1-10 中偶数的个数,直接列举 2、4、6、8、10 即可。
  2. 组合问题:如从 3 个元素中选 2 个的所有组合,逐一列出所有配对情况。
  3. 验证答案:比如判断某个数是否为质数,列举其所有可能因数进行验证。

局限与注意

  • 效率较低,候选范围过大时(如 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×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;
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐