哪位学编程的(C++或C)高人帮小弟看看下面的题目

用C或c++实现以下题目1.stringsearch问题实现函数Index(constchar*source,constchar*target){}charsource[... 用C或c++实现以下题目
1. string search 问题
实现函数Index(const char * source, const char * target){}
char source[] = "some string need to be scanned."; //this array may contain more than one '\0' characters
char target[] = "string to";//for example
从source中寻找到target的位置,第一个位置为0,如果无法找到,请给出提示,或者返回-1
2. 猴子选大王
N只猴子站成一排,从第一个开始数数,第M个猴子出去,数到最后一个时,从第一个接着数,持续下去,最后的那个当大王,
如果要当大王,需要站在第几个?
例如,N = 5 M = 3 猴子需要站在第4个位置
3. 24点计算
用四则的符号得出给定的4个数字(数字范围在1-15,不考虑四则运算的交换律A+B和B+A算不同解答,不考虑括号)如何计算可以得到整数24,
如果没有解答,也请给出提示
假如输入 4,8,7,5
给出结果
24 = 4 + 8 + 7 + 5
4. 经典八皇后问题
国际象棋中,8×8的棋盘,放置8个皇后,每个皇后都不会对其它皇后有威胁。(任何一个皇后的横、竖、对角线上都无法找到第二个皇后)
例如,(2 代表一个皇后,1代表空位)
2 1 1 1 1 1 1 1
1 1 1 1 2 1 1 1
1 1 1 1 1 1 1 2
1 1 1 1 1 2 1 1
1 1 2 1 1 1 1 1
1 1 1 1 1 1 2 1
1 2 1 1 1 1 1 1
1 1 1 2 1 1 1 1
请给出一个或所有解答
展开
 我来答
匿名用户
2008-01-25
展开全部
//1. string search 问题
size_t Index(const char * source, const char * target)
{
size_t i=0;
size_t len1 = strlen(source);
size_t len2 = strlen(target);
if(len1-len2<0) return -1;
for(;i<len1-len2;i++)
{
size_t m = i;
for(size_t j=0;j<len2;j++)
{
if(source[m]!=target[j])
break;
m++;
}
if(j==len2)
break;
}
return i<len1-len2?i:-1; //i就是找到的第一个位置
}

//2. 猴子选大王,用户输入M,N值,从1至N开始顺序循环数数,
//每数到M输出该数值,直至全部输出
//
int Josephu(int n, int m)
{
int flag, i, j = 0;
int *arr = (int *)malloc(n * sizeof(int));
for (i = 0; i < n; ++i)
arr[i] = 1;
for (i = 1; i < n; ++i)
{
flag = 0;
while (flag < m)
{
if (j == n)
j = 0;
if (arr[j])
++flag;
++j;
}
arr[j - 1] = 0;
printf("第%4d个出局的人是:%4d号\n", i, j);
}
free(arr);
return j;
}
/*
*测试代码
int main()
{
int n, m;
scanf("%d%d", &n, &m);
printf("最后胜利的是%d号!\n", Josephu(n, m));
system("pause");
return 0;
}
*/

//24点计算
//下面是核心代码
//需要完整代码请call我。
BOOL Calc24(int iNum1, int iNum2, int iNum3, int iNum4, CString& strResult)
{
//括号的几种情况
//1 无括号
//2 (a b) c d 同a b (c d), 下省略
//3 (a b c) d
//4 a (b c) d
//5 (a b) (c d)
//6 ((a b) c) d
//7 (a (b c)) d

//计算不含括号的情况
int iNumArr[4];
iNumArr[0] = iNum1;
iNumArr[1] = iNum2;
iNumArr[2] = iNum3;
iNumArr[3] = iNum4;

if (CalcArray1(iNumArr, strResult))
{
return TRUE;
}

if (CalcArray2(iNumArr, strResult))
{
return TRUE;
}

if (CalcArray3(iNumArr, strResult))
{
return TRUE;
}

if (CalcArray4(iNumArr, strResult))
{
return TRUE;
}

if (CalcArray5(iNumArr, strResult))
{
return TRUE;
}

if (CalcArray6(iNumArr, strResult))
{
return TRUE;
}

if (CalcArray7(iNumArr, strResult))
{
return TRUE;
}

return FALSE;
}

//经典八皇后问题
#include <stdio.h>

int f[11][11] ;
int adjm[121][121];
long fgf;
void creatadjm(void);
void e(int,int,int,int);
void travel(int,int);

int n,m;

int main()
{
int i,j,k,l;
printf("Input n:");scanf("%d",&n);
m=n*n;
creatadjm();
for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++) printf("%2d",adjm[i][j]);
printf("\n");
}
getchar();
printf("Input i,j:");
scanf("%d %d",&i,&j);
l=(i-1)*n+j;
while ((i>0)||(j>0))
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f[i][j]=0;
k=0;

travel(l,k);
printf("%d\n",fgf);fgf=0;

for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++) printf("%4d",f[i][j]);
printf("\n");
}
getchar();
printf("Input i,j:");scanf("%d %d",&i,&j);
l=(i-1)*n+j;
}
return 0;
}

void creatadjm()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f[i][j]=0;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
adjm[i][j]=0;

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(f[i][j]==0)
{
f[i][j]=1;
if((i+2<=n)&&(j+1<=n)) e(i,j,i+2,j+1);
if((i+2<=n)&&(j-1>=1)) e(i,j,i+2,j-1);
if((i-2>=1)&&(j+1<=n)) e(i,j,i-2,j+1);
if((i-2>=1)&&(j-1>=1)) e(i,j,i-2,j-1);
if((j+2<=n)&&(i+1<=n)) e(i,j,i+1,j+2);
if((j+2<=n)&&(i-1>=1)) e(i,j,i-1,j+2);
if((j-2>=1)&&(i+1<=n)) e(i,j,i+1,j-2);
if((j-2>=1)&&(i-1>=1)) e(i,j,i-1,j-2);
}
return;
}

void travel(int p,int r)
{
int i,j,q;

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(f[i][j]>r) f[i][j]=0;
r=r+1;
i=((p-1)/n)+1;
j=((p-1)%n)+1;

f[i][j]=r;

fgf++;
//if(r==25)printf("%d\n",p);
/*
printf("i=%d,j=%d,r=%d\n",i,j,r); getchar();
*/

for(q=1;q<=m;q++)
{
i=((q-1)/n)+1;
j=((q-1)%n)+1;
if((adjm[p][q]==1)&&(f[i][j]==0)) travel(q,r);
}
return;
}

void e(int i1,int j1,int i2,int j2)
{
adjm[(i1-1)*n+j1][(i2-1)*n+j2]=1;
adjm[(i2-1)*n+j2][(i1-1)*n+j1]=1;
return;
}
xndcn
2008-01-24 · TA获得超过826个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:426万
展开全部
我倒是可以提供2个,都是我以前回答过的,不过仅供参考:
1、
int Index(const char * source, const char * target)
{
int i=0,j=0;
int temp;
while(sourcer[i]!='\0')
{
j=0;
temp=i;
while(source[temp]!='\0'&&target[j]!='\0'&&source[temp]==target[j])
{
temp++;
j++;
}
if(j==strlen(target))
return i;
i++;
}
return -1;
}
2、约瑟夫问题

#include <stdio.h>

int children[100];
void main()
{
void out(int s,int m,int n);
int s,m,n;
int i;

printf("Enter the number of chilren(1<N<100):"); /*小孩人数*/
scanf("%d",&n);
printf("From which to count(1<=S<=%2d):",n); /*第1次报数的小孩编号*/
scanf("%d",&s);
printf("How many to count(1<M<=%2d):",n); /*报数间隔人数*/
scanf("%d",&m);
s--;

for(i=0;i<n;i++)
children[i]=1; /*初始化所有小孩*/
out(s,m,n); /*出列函数*/
}

void out(int s,int m,int n)
{
int i;
static int k=0;
int count=0;
if(s==n) s=0;
for(i=s;i<n;i++)
{
if(children[i]!=0)
count++;
if(count==m) break;
if((i==(n-1))&&count<m) i=-1;
}
children[i]=0;
k++;
printf("%2d ",i+1);
if(k%10==0)
printf("\n");
if(k!=n)
out(i+1,m,n);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qin198902042
2008-01-25 · TA获得超过143个赞
知道小有建树答主
回答量:624
采纳率:0%
帮助的人:273万
展开全部
我就做大家没做的那道吧
我做第三个

#include<stdio.h>
double ok(double n1,double n2,char c) /*计算两数运算结果*/
{
if(c=='+') return n1+n2;
else if(c=='-') return n1-n2;
else if(c=='*') return n1*n2;
else if(c=='/') return n1/n2;
}
void putout(double n1,double n2,double n3,double n4,char c1,char c2,char c3,char p)
{
switch(p)
{
case 12: printf("(%.0lf%c%.0lf)%c%.0lf%c%.0lf=24\n",n1,c1,n2,c2,n3,c3,n4);break;
case 23: printf("%.0lf%c(%.0lf%c%.0lf)%c%.0lf=24\n",n1,c1,n2,c2,n3,c3,n4);break;
case 34: printf("%.0lf%c%.0lf%c(%.0lf%c%.0lf)=24\n",n1,c1,n2,c2,n3,c3,n4);break;
case 13: printf("(%.0lf%c%.0lf%c%.0lf)%c%.0lf=24\n",n1,c1,n2,c2,n3,c3,n4);break;
case 24: printf("%.0lf%c(%.0lf%c%.0lf%c%.0lf)=24\n",n1,c1,n2,c2,n3,c3,n4);break;
default: printf("error\n");
}
}
void main()
{
double t1,t2,t3;
double n[5];
int p,p1,p2,p3,i;
char s[6]={12,23,34,13,24};
char *s1="+-*/";
char *s2="+-*/";
char *s3="+-*/";
printf("input n[1]: ");scanf("%lf",&n[1]);
printf("input n[2]: ");scanf("%lf",&n[2]);
printf("input n[3]: ");scanf("%lf",&n[3]);
printf("input n[4]: ");scanf("%lf",&n[4]);
printf("\n");
for(i=0;i<24;i++)
for(p=0;p<=4;p++)
for(p1=0;p1<=3;p1++)
for(p2=0;p2<=3;p2++)
for(p3=0;p3<=3;p3++)
{
switch(s[p])
{
case 12: t1=ok(n[1],n[2],s1[p1]);
if((s2[p2]=='+'||s2[p2]=='-')&&(s3[p3]=='*'||s3[p3]=='/'))
{
t2=ok(n[3],n[4],s3[p3]);
t3=ok(t1,t2,s2[p2]);
}
else
{
t2=ok(t1,n[3],s2[p2]);
t3=ok(t2,n[4],s3[p3]);
}
if(t3==24) putout(n[1],n[2],n[3],n[4],s1[p1],s2[p2],s3[p3],s[p]);
break;
case 23: t1=ok(n[2],n[3],s2[p2]);
if((s1[p1]=='+'||s1[p1]=='-')&&(s3[p3]=='*'||s3[p3]=='/'))
{
t2=ok(t1,n[4],s3[p3]);
t3=ok(n[1],t2,s1[p1]);
}
else
{
t2=ok(n[1],t1,s1[p1]);
t3=ok(t2,n[4],s3[p3]);
}
if(t3==24) putout(n[1],n[2],n[3],n[4],s1[p1],s2[p2],s3[p3],s[p]);
break;
case 34: t1=ok(n[3],n[4],s3[p3]);
if((s1[p1]=='+'||s1[p1]=='-')&&(s2[p2]=='*'||s2[p2]=='/'))
{
t2=ok(n[2],t1,s2[p2]);
t3=ok(n[1],t2,s1[p1]);
}
else
{
t2=ok(n[1],n[2],s1[p1]);
t3=ok(t2,t1,s2[p2]);
}
if(t3==24) putout(n[1],n[2],n[3],n[4],s1[p1],s2[p2],s3[p3],s[p]);
break;
case 13:
if((s1[p1]=='+'||s1[p1]=='-')&&(s2[p2]=='*'||s2[p2]=='/'))
{
t1=ok(n[2],n[3],s2[p2]);
t2=ok(n[1],t1,s1[p1]);
}
else
{
t1=ok(n[1],n[2],s1[p1]);
t2=ok(t1,n[3],s2[p2]);
}
t3=ok(t2,n[4],s3[p3]);
if(t3==24) putout(n[1],n[2],n[3],n[4],s1[p1],s2[p2],s3[p3],s[p]);
break;
case 24:
if((s2[p2]=='+'||s2[p2]=='-')&&(s3[p3]=='*'||s3[p3]=='/'))
{
t1=ok(n[3],n[4],s3[p3]);
t2=ok(n[2],n[1],s2[p2]);
}
else
{
t1=ok(n[2],n[3],s2[p2]);
t2=ok(t1,n[4],s3[p3]);
}
t3=ok(n[1],t2,s1[p1]);
if(t3==24) putout(n[1],n[2],n[3],n[4],s1[p1],s2[p2],s3[p3],s[p]);
break;
default: printf("error\n");
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f40712d
2008-01-25 · TA获得超过830个赞
知道小有建树答主
回答量:643
采纳率:0%
帮助的人:721万
展开全部
是啊,这几个有难度,不过也不是不能做,第一个可以用"kmp专用算法"实现,第二个用"循环链表",第三个我不知道,第四个用"栈"第二个最简单!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dillanzhou
2008-01-24 · TA获得超过220个赞
知道小有建树答主
回答量:653
采纳率:0%
帮助的人:353万
展开全部
第一个是kmp算法,第二个约瑟夫问题,第三个24点算法,第四个八皇后问题。建议你按照我说的名字baidu一下。因为写出来很麻烦的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
renwanjie66
2008-01-24 · 超过33用户采纳过TA的回答
知道答主
回答量:319
采纳率:0%
帮助的人:68.2万
展开全部
这几个题名确实比较难 自己应该潜心研究以下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式