刷题4

39 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情


题目描述

点击直达题目链接 在这里插入图片描述

解题思路

第一步:把整个字符串逆序 第二步:把每次单词序

代码

#include <stdio.h>
void f(char* p,int n)
{
	int i = 0;
	int j = n;
	char temp;
	while (i < j)
	{
		temp = p[i];
		p[i] = p[j];
		p[j] = temp;
		i++; j--;
	}
}
int main()
{
	char arr[81];
	gets(arr);
	int n = strlen(arr)-1;
	//整个字符串逆序
	f(arr,n);
	//每个单词逆序
	int i = 0,count=0;
	for (i=0;i<=n+1;i++)
	{
		if (arr[i] == ' '||arr[i]=='\0')
		{
			f(arr + i - count, count - 1);
			count = 0;
		}
		else
			count++;
			
	}
	printf(arr);
	return 0;
}

题目描述

点击直达题目链接 在这里插入图片描述

解题思路

这个题目最坑人的地方是多项式的第一项求导为0的情况,要输出为0 0 除了第一项外的其他项,其他项即使求导为0,也不打印0

代码

arr数组储存系数,brr数组储存指数 j控制的是求导之后的系数和指数的下标。

#include <stdio.h>
int main()
{
    int arr[100], brr[100];
    int i = 0, j = 0, a;
    while (scanf("%d %d", &arr[i], &brr[i]) != EOF)
    {
        if (arr[0] == 0 && brr[0] == 0)
        {
            printf("0 0");
        }
        if (brr[i] == 0);
        else
        {
            arr[j] = arr[i] * brr[i];
            brr[j] = brr[i] - 1;
            j++;
        }
        i++;
    }
    for (a = 0; a < j; a++)
    {
        printf("%d %d", arr[a], brr[a]);
        if (a != j - 1)
            printf(" ");
    }
    return 0;
}

题目描述

点击直达题目链接 在这里插入图片描述

解题思路

这个题目本身的问题就是怎么解决两个数的越界问题, 但是A+B>C可以转换为砍一半进行比较注意: 1.砍一半之后要转换成浮点型。 2.不要这样写(double)(A+B),因为这这样A+B也可能越界。具体处理看代码

代码

#include <stdio.h>

int main()
{
	int n,i;
	int a[11], b[11], c[11];
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf("%d%d%d", a + i, b + i, c + i);
	}
	for (i = 1; i <= n; i++)
	{
	//这样进行比较
		if (((double)a[i - 1] / 2 + (double)b[i - 1] / 2) > (double)c[i - 1] / 2)
		{
			printf("Case #%d: true\n", i);
		}
		else
		{
			printf("Case #%d: false\n", i);
		}
	}
	return 0;
}