(1) 任何大于6的偶数都能表示为两个素数之和,如“40=3+37”.设计一个算法,求任意一个大于6的偶数n的这两个素数 。
#include <iostream>
#include <math.h>
using namespace std;
int sushu(int a)
{
for (int i=2; i<sqrt(a); i++)
{
if (a%i == 0)
{
return 0;
}
}
return 1;
}
void main()
{
int a;
cout << "请输入一个大于6的偶数:";
cin >> a;
for (int i=0; i<a/2; i++)
{
if (sushu(i) && sushu(a-i))
{
cout<<a<<"="<<i<<"+"<<a-i<<endl;
break;
}
}
}
(2)设计一个递归算法,求二叉树BT,度为2的结点数,度为1的结点数和叶结点数 。二叉树结点的结构为:
| left | data | right |
typedef struct Tree{
Tree *left;
Tree *right;
int data;////节点数据存储点,类型任意
} Tree ;
int treeNodeCount(Tree *t)
{
if(t==NULL)
return 0;
else {
if ((t->left!=NULL)&&(t->right!=NULL))
return treeNodeCount(t->left)+1+treeNodeCount(t->right);
else return 0;
}
}(3)数组A有n个正整数,设计一个算法,判定A是否存在子序列,其和为给定的整数K。若有,输出的子序列的起始位置和终止位置
#include<stdio.h>
#define N 8
void dy_and(int a[],int s[][N])
{
int i,j;
for(i=0;i<N;i++)
s[i][i]=a[i];
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
s[i][j]=s[i][j-1]+a[j];
}
void main()
{
int a[N];
int s[N][N]={0};
int i,j,b,c,k=0;
printf("请输入数组:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("请输入K值=\n");
scanf("%d",&k);
dy_and(a,s);
for(i=0;i<N;i++)
for(j=i;j<N;j++)
if(s[i][j]==k)
{
b=i+1;
c=j+1;
}
if(k<0)
k=0;
printf("存在子序列和为:%d,从数组的第%d个数开始,到第%d个数结束\n",k,b,c);
}
本文深入探讨了如何通过算法解决数学难题,具体展示了如何使用编程语言实现寻找任意大于6的偶数与其构成素数和的方法,并通过递归算法解析二叉树的结点特性。此外,还介绍了数组中特定和子序列的搜索策略,旨在为读者提供实用的编程技巧和理论理解。
795

被折叠的 条评论
为什么被折叠?



