主题总数:270876
总帖数:1119824
注册会员总数:255497
今日总帖数:307
|
|
├─◆ 狼盟首页 > 查看贴子 > 详细信息
楼主
请教3道有水平的题(感觉第一题最复杂),用C写
第一题:输入一行字符,统计这行字符中重复出现过的字符串(以任意单个字母表示字符输入结束)。
例如:
请输入字符串
asdf sadf gkro sgojrg a(输入的字符)
a后面再没有字符串了
没有重复出现过的字符串(输出结果)
另外例如:
请输入字符串
asdf asdf gkro sgojrg b
b后面再没有字符串了
asdf已连续出现2次
第二题: 从键盘输入10个正整数,且每个数均在1000至9999之间。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行升序排列,然后将满足此条件的数存入数组b中,如果后三位的数值相等,则按原先的数值进行降序排列。(南开)
例:请输入10个数(1000~9999):
处理前 6012 5099 9012 7025 8088
处理后 9012 6012 7025 8088 5099(012<025<088<099,按升序排列;而前两个数中012=012,则比较9012>6012,按降序排列。所以得此顺序)
第三题:.歌德巴赫猜想
验证:2000以内的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内 的正偶数成立)。在屏幕上显示:
4=2+2
6=3+3
8=3+5
10=3+7
12=5+7
14=3+11
…
三道题,牵涉到的知识点比较多,我是初学者,不算太明白,相信大虾指点以后我能有不少的长进,先谢谢了!
-
寂寞化石 [ 1 楼 ]
2003-05-31 18:29:00
三道题需要耐心,希望大虾能好好看一看
-
lheng [ 2 楼 ]
2003-06-01 12:37:00
我尝试做第三条吧
-
C爱好者 [ 3 楼 ]
2003-06-01 21:48:00
第一题中的例子asdf asdf gkro sgojrg b,中不是有重复出现的
as:2
asd:2
asdf:2
sd:2
sdf:2
df:2
这些字符串吗?你怎么说是只有:asdf两个啊?
-
寂寞化石 [ 4 楼 ]
2003-06-02 09:35:00
确实,你的考虑更全面
我一会儿就去调试一下
谢谢你的帮助
-
寂寞化石 [ 5 楼 ]
2003-06-02 10:12:00
其实,我觉得还是只能算asdf,这也是空格的目的
就是以空格为间断重复出现过的字符串
-
寂寞化石 [ 6 楼 ]
2003-06-02 10:16:00
再说,第一个例子里面不就是说明了吗?
所以我觉得应该只算类似于只有“asdf”这种的
-
C爱好者 [ 7 楼 ]
2003-06-02 13:53:00
那你题目就应该说明是以空格来划分一个字符串啦。
-
C爱好者 [ 8 楼 ]
2003-06-02 14:11:00
jsSort(int n[],int b[])
{int i,j,k;
for(i=0;i<10;i++)
for(j=i;j<10;j++)
if(n[i]%1000>n[j]%1000)
{k=n[i];n[i]=n[j];n[j]=k;}
else if(n[i]%1000==n[j]%1000&&n[i]<n[j])
{k=n[i];n[i]=n[j];n[j]=k;}
for(i=0;i<10;i++)
b[i]=n[i];
}
main()
{int n[10],b[10]={0},i;
for(i=0;i<10;i++)
scanf("%d",&n[i]);
jsSort(n,b);
for(i=0;i<10;i++)
printf("%d,",b[i]);
}
-
C爱好者 [ 9 楼 ]
2003-06-02 14:12:00
上面是第二题。
-
C爱好者 [ 10 楼 ]
2003-06-02 14:30:00
这是第三题,你把其中的20改为2000就符合你这题的要求了。
ck(int k)
{int i;
for(i=2;i<k;i++)
if(k%i==0)return 0;
return 1;
}
main()
{int i,j,k;
for(k=2;k<=20;k+=2)
for(i=2;i<=k/2;i++)
{if(ck(i)&&ck(k-i))
printf("%d=%d+%d
",k,i,k-i);
}
}
-
lheng [ 11 楼 ]
2003-06-03 10:35:00
兄弟,我已经帮你解决了第三条题,我是用c++写的,调试过是行的,但是由于时间问题,我没有用子程序分开,程序写的有点乱,请见谅。
#include<iostream.h>
int num[2000];
int Num[304];
int doublenum[1000];
void main ()
{
int n,i,k,j,a,b,h=0,d,g;
num[0]=1;
num[1]=2;
//定义一个2000以内的索数数组
for(a=2,n=3;n<=2000,a<2000;n++,a++)
{
j=i;
for(k=2;k<n;k++)
{
if(n%k==0)
break;
else
if((k==(n-1))&&(n%k!=0))
i=n;
}
if((n==3)||(j!=i)||(num[a]!=0))
{num[a]=i;
}
}
for(b=0;b<304;b++)
{
if(b!=0)
a=a+1;
else
a=0;
for(;a<2000;a++)
{
if((num[a]!=0)&&(h!=num[a]))
{h=num[a];
break;}
}
Num[b]=h;
}
//定义一个2000以内的偶数数组
for(d=0,g=1;d<1000;d++,g++)
{
doublenum[d]=2*g;
}
//列举
for(d=0;d<1000;d++)
{
for(b=0;b<304;b++)
{
for(a=0;a<304;a++)
{
if(doublenum[d]==Num[b]+Num[a])
break;
}
if(doublenum[d]==Num[b]+Num[a])
break;
}
cout<<doublenum[d]<<"="<<Num[b]<<"+"<<Num[a]<<endl;
}
}
-
lheng [ 12 楼 ]
2003-06-03 10:38:00
看了“C爱好者”的程序,看来我要加把劲练习了。
|
|
| |
|
|