c\c++ 编程 急~~~~~~~~~~~

来源:百度知道 编辑:UC知道 时间:2024/06/06 17:16:03
1,给定任意三个整数N,P,Q编程确定是否存在一个含N个整数的整数序列,使得该序列中任意P个连续(注意:是连续的)整数之和为正,任意Q个连续整数之和为负,如果存在输出该序列,否则输出”NO”,
如:输入4 2 3 输出NO
输入6 5 3 输出-3 5 -3 -3 5 -3
2,有史前部落:人族(M),髭族(P),半人半髭族(H),他们之间的称呼只有人和髭两种,人族称呼人和髭他们本身的名字,称呼半人半髭族为人,髭族称呼本族为人,称呼外族为髭,半人半髭族称呼本族为髭,称呼外族为人,给出N个人以及他们之间的相互称呼(N<=100),求出各族的人数,无解输出NO ANSWER
如:输入 5
SMMMM
MSMMM
MMSMM
MMMSM
MMMMS
则输出
(1) M=5,P=0,H=0
(2) M=4,P=0,H=1
(3) M=0,P-5,H=0
注:其中输入矩阵中的M表示称呼对方为人,对角线上的S表示自己称自己为S,该矩阵是一个特例,其中没有称呼对方为髭的即P
满意的回答直接追加300分
怀疑第一个有无数个解的朋友可以自己限定,-100到100也行
快啊???????????
答好了,肯定加分,现在不能先悬赏,不然没人回答就白丢分了
答好的话,你要分,要多少我加多少,只要不超过1000
没人回答啊////高手哪去了?
能不能有个完整的代码,这看起来太复杂

我分析了一下第一个问题:我的思路是:
(1)确定可用的元素,用数组ElemArray[]表示。
(2)定下目标数组AimArray[N],从ElemArray[]中取元素穷举出有N个元素的目标数组的值,赋组目标数组(当然有很多组这样的目标数组)。
(3)判断目标数组中任意P个连续(注意:是连续的)整数之和为正(用函数Get_Negative(AimArray,N,Q)),任意Q个连续整数之和为负(Get_Plus(AimArray,N,P)).循环每个目标数组。能够找到符合要求的则输出。否则提示。
-------------------部分代码(算法如下)----------------------
#include <iostream>
using namespace std;

int SetElemArrayData(int* npElemArray,const int nMaxsize,int nBeg_num,int nEnd_num);
void SetAimArrayData(int* npAimArray,int* npElemArray,int n,const int nN);
bool Get_Negative(int* npAimArray,int nN,int nQ);
bool Get_Plus(int* npAimArray,int nN,int nP);
void PrintAimArray(int* npAimArray,int nN);
//------------------------------------------------------
int SetElemArrayData(int* npElemArray,const int nMaxsize,int nBeg_num,int nEnd_num)
{
if((nEnd_num-nBeg_num)>nMaxsize)
return -1;
else
{
int nCounter(0);
for