早先年考研的主考科目正是【算法与数据结构】,复习得还算可以。也在当时[百度知道]上回答了许多相关问题,现把他们一起汇总整理一下,供读者参考。
【1】
原题目地址:
https://zhidao.baidu.com/question/1495132662371543299.html?entry=qb_uhome_tag
题目:使用C++如何将字符串中的除空格外的其他元素赋给一个字符数组?
比如说,我有一个字符串“how are you”,现在希望将它赋给一个字符类型的数组a[],希望a[1]=='how',a[2]=='are',a[3]=='you'
答:
#include<stdio.h>
#include <windows.h>
void Func(char (*p)[10],char b[],int *pval)
{
int j,i,t=0;
for(i=0,j=0; b[i]!='\0'; i++,j++)
{
if(b[i]==' ') //遇到空格
{
p[t][j]='\0';
j=-1;
t++;
}
else //遇到是单词
p[t][j]=b[i];
}
p[t][j]='\0';
*pval = t;
return;
}
void Show(char (*p)[10],int *pval)
{
int j=0;
int k=0;
while(k<=*pval)
{
printf("a[%d]==",j);
for(int i=0; p[k][i]!='\0'; i++)
{
printf("%c",p[k][i]);
}
putchar(10);
k++;
j++;
}
return;
}
int main()
{
int val=NULL;
char a[10][10];
char b[]="How are you";
printf("b:%s\n-------------\n",b);
char (*p)[10];
p = a;
Func(p,b,&val);
Show(p,&val);
system("pause");
return 0;
}
得到结果:
【2】
原题目地址:
https://zhidao.baidu.com/question/712193735370778525.html?entry=qb_uhome_tag
题目:编写字符串插入函数String_Insert,将字符串sub插入到字符串str中,插入位置为pos(从0开始)。
1.编写字符串插入函数String_Insert,将字符串sub插入到字符串str中,插入位置为pos(从0开始)。假设分配给str的内存空间长度足够。
2.上一题,设分配给字符串str的空间有限,为size(字节数,结尾的0字符也算在内),插入后有可能超出,重写该函数,保证不发生非法内存访问。
答:
【1】
#include<stdio.h>
#include <windows.h>
void String_Insert(char sub[],char str[],int pos)
{
int i,j=0;
int sub_size=strlen(sub);
int str_size=strlen(str);
for(i=str_size-1; i>=pos-1; i--)
{
str[i+sub_size]=str[i];
}
str[str_size+sub_size]='\0';
for(i=pos-1; i<pos-1+sub_size; i++,j++)
{
str[i]=sub[j];
}
return;
}
int main()
{
char sub[10];
char str[30];
int pos;
printf("输入sub字符串:");
gets(sub);
printf("输入str字符串:");
gets(str);
printf("输入插入位置:");
scanf("%d",&pos);
String_Insert(sub,str,pos);
printf("str:");
puts(str);
putchar(10);
system("pause");
return 0;
}
【2】
#include<stdio.h>
#include <windows.h>
void String_Insert(char sub[],char str[],int pos,int size)
{
int i,j=0;
int sub_size=strlen(sub);
int str_size=strlen(str);
int t=sub_size+str_size+1;
int k;
if(t<=size)
{
for(i=str_size-1; i>=pos-1; i--)
{
str[i+sub_size]=str[i];
}
str[str_size+sub_size]='\0';
for(i=pos-1; i<pos-1+sub_size; i++,j++)
{
str[i]=sub[j];
}
}
else
{
k=t-size;
for(i=str_size-1-k; i>=pos-1; i--)
{
str[i+sub_size]=str[i];
}
for(i=pos-1; ((i<pos-1+sub_size)&&(i<size)); i++,j++)
{
str[i]=sub[j];
}
str[size-1]='\0';
}
return;
}
int main()
{
char sub[10];
char str[10];
int size = sizeof(str);
int pos;
printf("输入sub字符串:");
gets(sub);
printf("输入str字符串:");
gets(str);
printf("输入插入位置:");
scanf("%d",&pos);
String_Insert(sub,str,pos+1,size);
printf("str:");
puts(str);
putchar(10);
system("pause");
return 0;
}
上机测试:
【1】
【2】
【3】
原题目地址:https://zhidao.baidu.com/question/1495131980697139059.html?entry=qb_uhome_tag
题目:c语言求1到100以内所有只有2,5,7,11四个素数因子的数,并输出这些数的所有因子
答:
#include <stdio.h>
#include <windows.h>
bool Func2(int a) //判断是否满足要求(因子只有2,5,7,11)
{
int j,t=0;
for(j=2; j<a; j++)
{
if(0==(a%j))
{
if((2==j)||(5==j)||(7==j)||(11==j))
{
t++; //有几个因子
continue;
}
else
return false;
}
}
if(0==t) //如果没有因子,也就是素数,则返回false
return false;
if(0!=t) //满足要求,返回true
return true;
}
void Func(int min,int max)
{
int i,j;
for(i=min; i<=max; i++)
{
if(Func2(i)) //判断是否符合要求
{
printf("[%d]:",i); //输出满足的数
for(j=2; j<i; j++)
{
if(0==(i%j))
{
printf("%d ",j); //输出各因子
}
}
putchar(10); //输出【回车】(换行)
}
}
return;
}
int main()
{
Func(1,100);
system("pause");
return 0;
}
【注意】:这道题目隐含一个说明吧(至少我是这么理解的)-- 1作为所有数的因子,应该也包括在条件之内!(也就是1,2,5,7,11 5个因子数满足条件),所有我在这把【j】变量从2开始算了。