有關演算法與資料結構的考題解答參考彙總 [C++] [連結串列]
早先年考研的主考科目正是【演算法與資料結構】,複習得還算可以。也在當時[百度知道]上回答了許多相關問題,現把他們一起彙總整理一下,供讀者參考。
【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開始算了。