好久没有学习啦,忙完前一段时间(一个月都在苦哈哈的写报告)的开题之后,今天开始继续编程学习!
晚上进行了测试,主要有两个编程题,一个是求最大公倍数,还有一个是求字符的逆序。
目录
2、求字符的逆序,要求输入为I like beijing. 输出为beijing. like i
一、自己实现
1.求两个数字的最大公倍数
#include<stdio.h>
int commomFun(int m, int n)
{
//思路:先求两个数字的最大数
int max;
int min;
if (m > n)
{
max = m;
min = n;
}
else
{
max = n;
min = m;
}
//如果两个数没有公约数,则最大公倍数为两者相乘
if (max%min == 0)
{
return max;
}
//否则最大值即为最大公倍数
return (max*min);
}
void main()
{
int a ;
int b ;
scanf_s("%d", &a);
scanf_s("%d", &b);
int commonValue = commomFun(a, b);
printf("%d", commonValue);
}
2、求字符的逆序,要求输入为I like beijing. 输出为beijing. like i
自己当时没有做出来,只当时想到的是正常的逆序功能,如下:
//收尾逆序的功能实现
void reverseFun( char *arr,int k)
{
for (int i = 0; i < k/2; i++)
{
char temp = arr[i];
arr[i] = arr[k-i-1];
arr[k-i-1] = temp;
}
}
void main()
{
char arr[] = "I like beijing.";
int n = sizeof(arr) / sizeof(arr[0]);
reverseFun(arr ,n);
for (int i = 0; i < n; i++)
{
printf("%c ", arr[i]);
}
}
二、后续参考答案完善
1、简便方法
#include<stdio.h>
int main()
{
int a = 5;
int b = 10;
int res = a > b ? a : b; //取出两个数字中的最大值
while (res%a != 0 || res % b != 0) //最大值对两个数取模,如果有一个不等于0,说明没有找到最大公倍数,最大值就++;
{
res++;
}
printf("%d ", res);
}
2、思路:先将整个句子逆序,再将每部分的单词逆序。
#include<stdio.h>
#include<string.h>
void reverse( char *str,int left,int right)
{
while (left < right)
{
int temp = str[left];
str[left] = str[right];
str[right] = temp;
left++;
right--;
}
}
int main()
{
char str[] = "I like Beijing.";
int len = strlen(str);
//1、 完成对数组内的字符的逆序操作
reverse(str,0,len-1);
//2、寻找数组内字符串的单词,对单词进行逆序
//2-1寻找单词
//定义单词的首尾索引
int word_start = 0;
int word_end = 0;
while (word_start < len)
{
while (word_end<len & str[word_end] !=' ')
//2-2如果单词的末尾小于字符串长度并且单词末尾的字符不为空格,那么单词末尾的索引加加
{
word_end++;
}
//2-3否则,找到了单词的末尾,则调用reverse函数,对整个单词进行逆序
reverse(str, word_start, word_end-1); //单词末尾要-1,因为此时找到的是空格
//2-4完成单词的逆序之后,要继续下寻找下一个单词,所以要更新单词的索引号
word_end++;
word_start = word_end;
}
printf("%s", str);
return 0;
}