算法思路:来源于题目从键盘输入一个字符串,然后按照下面要求输出一个新字符串。新串是在原串中,每两个字符之间插入一个空格,如原串为abcd,则新串为ab cd。要求在函数insert中完成新串的产生﹔
思路:观察原先的字符串位置,与插入空格后字符串的位置。进而总结出算法公式
算法公式:a是一个数组,i是一个整型变量,
a[i+i/n] = a[i]; //除了n=1的公式,a[2*i] = a[i],其他的要实现每n个字符串之间插入空格使用此公式。
a[(n+1)*i - 1] = ' '; //表示空格
下面我以三个例子来解释这种算法是否正确:
//从键盘输入一个字符串,然后按照下面要求输出一个新字符串。新串是在原串中,每个字符之间插入一-个空格,
//如原串为abcd,则新串为ab cd。要求在函数insert中完成新串的产生:
第一种证明:
使用a[2*i] = a[i]算法,算出每个字符之间插入空格,代码+图片;可以直接复制代码验证。
#include<stdio.h>
#include<string.h>
int insert(char a[]);
int main()
{
char a[100];
printf("输入字符串:");
scanf("%s",a);
insert(a);
printf("输出字符串:%s\n", a);
}
int insert(char a[])
{
int i;
for (i = strlen(a)-1; i >0; i--)
{
a[2 * i] = a[i];
a[2 * i - 1] = ' ';
}
return a[100];
}
第二种证明:
//从键盘输入一个字符串,然后按照下面要求输出一个新字符串。新串是在原串中,每两个个字符之间插入一-个空格,
//如原串为abcd,则新串为ab cd。要求在函数insert中完成新串的产生:
#include<stdio.h>
#include<string.h>
int insert(char a[]);
int main()
{
char a[100];
printf("输入字符串:");
scanf("%s",a);
insert(a);
printf("输出字符串:%s\n", a);
}
int insert(char a[])
{
int i;
for (i = strlen(a)-1; i >0; i--)
{
a[i + i/2] = a[i];
a[3* i -1] = ' ' ;
}
return a[100];
}
第三种证明:
//从键盘输入一个字符串,然后按照下面要求输出一个新字符串。新串是在原串中,每三个字符之间插入一-个空格,
//如原串为abcd,则新串为ab cd。要求在函数insert中完成新串的产生:
#include<stdio.h>
#include<string.h>
int insert(char a[]);
int main()
{
char a[100];
printf("输入字符串:");
scanf("%s",a);
insert(a);
printf("输出字符串:%s\n", a);
}
int insert(char a[])
{
int i;
for (i = strlen(a)-1; i >0; i--)
{
a[i + i/3] = a[i];
a[4* i -1] = ' ' ;
}
return a[100];
}