C++(枚举法一练习题)

求方程的正整数解

【描述】编写程序,求X^2 + Y^2 = n 的正整数解,n为从键盘上输入的一个正整数。

【输入】输入数据占一行,为一个正整数n,10<=n<=10000

【输出】对输入的正整数,输出所有的解,格式如样例输出为例,如果没有解,则输出no answer。

【样例输入1】2000

【样例输出1】

2000=88+44 44

2000=2020+40 40

2000=4040+20 20

2000=4444+8 8

【样例输入2】1999

【样例输出2】no answer

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() 
{
    int n,x,y;
    cin>>n;
    int m = sqrt(n); //循环变量x和y的终值
    bool flag = false;//取值为true表示有解,取值为false表示无解
    for(x=1;x<=m;x++)//x从1枚举到m
    {
        for(y=1;y<m;y++)//y从1枚举到m
        {
            if(x*x + y*y == n)
            {
                flag = true;
                cout<<n<<"="<<x<<"*"<<x<<"+"<<y<<"*"<<y<<endl;
            }
        }
    }
    if(!flag) cout<<"no answer"<<endl;//无解
	return 0;
}

/*
【输入用例3】
2025
【输出用例3】
2025=27*27+36*36
2025=36*36+27*27
【输入用例4】
6666
【输出用例4】
no answer
【输入用例5】
7696
【输出用例5】
7696=36*36+80*80
7696=60*60+64*64
7696=64*64+60*60
7696=80*80+36*36
【输入用例6】
9999
【输出用例6】
no answer
*/

即是平方数也是立方数

【描述】64这个数即使平方数(82)也是立方数(43),现在想知道,对于给定的正整数n,

1~n范围内有多少个这种数。

【输入】输入占一行,为一个整数n

【输出】输出占一行,为求得的答案

【样例输入】100

【样例输出】

1

64

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() 
{
    long long n, k;
    cin >>n;
    int cnt =0;
    for(k=1; k*k*k*k*k*k<=n;k++)
    {
        cnt++;
        if(k*k*k*k*k*k<=n)
        {
            cout<<k*k*k*k*k*k<<endl;
        }
    }
    //cout<<cnt<<endl;
	return 0;
}

/*
【输入用例2】
10
【输出用例2】
1
64
【输入用例3】
50
【输出用例3】
1
【输入用例4】
150
【输出用例4】
1
64
【输入用例5】
1000
【输出用例5】
1
64
729
*/

分解质数

【描述】1742年,德国数学家哥德巴赫提出了著名的哥德巴赫猜想,任何一个不小于4的偶数都可以表示为两个质数之和。编写程序,将一个不小于4的偶数分解成两个质数之和,并输出所有的分解形式。

【输入】输入数据占一行,为一个偶数n,4<=n<=2^10。

【输出】对输入的偶数,输出所有的分解形式,样式输出如下所示

【样例输入】

34

【样例输出】

34=3+31

34=5+29

34=11+23

34=17+17

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int prime(int m)          //判断m是否为质数,如果是质数,返回1否则返回0
{
    int i, k=sqrt(m);
    for(i=2;i<=k;i++)
        if(m%i==0) break;//如果i能整除m,提前退出循环
    if(i>k) return 1;    //m为质数
    else return 0;       //m为合数
}
int main() {
    int n,a,b;
    cin>>n;//输入一个偶数
    if(n==4)
    {
      cout<<"4 = 2 + 2"<<endl; return 0;  
    }
    for(a=3;a<=n/2;a=a+2)//从a=3开始,每次递增2,跳过偶数
    {
        if(prime(a))
        {
          b=n-a;
            if(prime(b))
                cout<<n<<"="<<a<<"+"<<b<<endl;//找到一个分解
        }
    }
	return 0;
}

/*
【输入用例2】
20
【输出用例2】
20=3+17
20=7+13
【输入用例3】
60
【输出用例3】
60=7+53
60=13+47
60=17+43
60=19+41
60=23+37
60=29+31
【输入用例4】
76
【输出用例4】
76=3+73
76=5+71
76=17+59
76=23+53
76=29+47
【输入用例5】
88
【输出用例5】
88=5+83
88=17+71
88=29+59
88=41+47
【输入用例6】
100
【输出用例6】
100=3+97
100=11+89
100=17+83
100=29+71
100=41+59
100=47+53
*/

特殊的数

【描述】给出若干个整数,询问其中是否有一对数的和等于给定的数

【输入】共三行:第一行是整数n,表示有n个整数;第二个是n个整数;第三个是一个整数m,表示需要得到的和。

【输出】若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数满足条件,选择数对中较小的数最小组合。若找不到符合要求的数对,输出no。

【样例输入】

4

2 5 1 4

6

【样例输出】

1 5

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
    int i,j,n,a[100010],m;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>a[i];
    cin>>m;
    sort(a,a+n);//把a中的数按从小到大排序
    for(i=0;i<n;i++)
    {
        for(j=j+1;j<n;j++)
        {
            if(a[i]+a[j]==m){
                cout<<a[i]<< " "<<a[j]<<endl; return 0;
            }
        }
    }
    cout<<"NO"<<endl;
	return 0;
}

/*
【输入用例2】
4
2 5 3 4
7
【输出用例2】
2 5
【输入用例3】
5
2 5 3 4 6
8
【输出用例3】
2 6
【输入用例4】
6
2 5 3 4 6 1
8
【输出用例4】
NO 
【输入用例5】
7
2 5 3 4 6 1 8
9
【输出用例5】
1 8
*/
相关推荐
小雨下雨的雨25 分钟前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.3 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
一条小锦吕*3 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
CryptoPP4 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫4 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
如竟没有火炬5 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
阳区欠5 小时前
【LangChain】LLM基础介绍
开发语言·python·langchain
Jinkxs5 小时前
Java 跨域14-Java 与区块链(Hyperledger)集成
java·开发语言·区块链
8Qi85 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术6 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构