1.倒置字符串
解题思路:题目也不难,将一句话的单词进行倒置,标点不倒置。我们可以采用三步翻转法:即先将字符串整体逆置,再对逆置后的字符串中每一个单词部分进行逆置。 比如:I like beijing.
第一步,字符串整体逆置,得到:.gnijieb ekil I
第二步,将字符串中每一个单词逆置,得到:beijing. like I
#include <assert.h>
void reverse(char* left, char* right)
{
assert(left);
assert(right);
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[101] = { 0 };
//输入
gets(arr);//I like beijing.
//逆置
int len = strlen(arr);
//1. 逆序整个字符串
reverse(arr, arr + len - 1);
//2. 逆序每个单词
char* start = arr;
while (*start)
{
char* end = start;
while (*end != ' ' && *end != '\0')
{
end++;
}
reverse(start, end - 1);
if (*end != '\0')
end++;
start = end;
}
//输出
printf("%s\n", arr);
return 0;
}
2.BC60 带空格直角三角形图案
解题思路:当前i行和j列满足的关系是什么找出来,即可很容易的写出这道题,右对角线满足i+j=n-1,而右对角线的左侧空格满足i+j<n-1,所以我们可以很容易的写出代码:
int main()
{
int n = 0;
while(~scanf("%d",&n))
{
int i = 0;
for(i=0;i<n;i++)
{
int j = 0;
for(j = 0;j<n;j++)
{
if(i+j<n-1)
{
printf(" ");
}
else
{
printf("* ");
}
}
printf("\n");
}
}
return 0;
}
3.BC96-有序序列判断
解题思路:有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。就是说有序满足两种情况,一种是从大到小,另一种是从小到大,我们可以定义两个临时变量来帮助判断是否有序,一个判断有序,另一个判断无序。具体的有序或者无序的判断只需要去比较相邻元素的大小即可。下面实现代码:
int main()
{
int n = 0;
int arr[50] = {0};
int flag1 = 1;//升序有序
int flag2 = 1;//降序有序
int i = 0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d ",&arr[i]);
}
for(i=0;i<n-1;i++)
{
if(arr[i]>=arr[i+1])
{
flag1 = 0;
}
if(arr[i]<arr[i+1])
{
flag2 = 0;
}
}
if(flag1+flag2 == 1)
{
printf("sorted\n");
}
else
{
printf("unsorted\n");
}
return 0;
}