PAT乙级(10)一元多项式求导 (25) 客似云来(water)

题目描述

设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)

输入描述:

以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出描述:

以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。

输入例子:

3 4 -5 2 6 1 -2 0

输出例子:

12 3 -10 1 6 0

思路:

简单思路,分门别类的处理可能出现的情况。

注意 : 数字间以空格分隔,但结尾不能有多余空格注意“零多项式”的指数和系数都是0,但是表示为“0 0”。

当系数项不是0,指数是0的时候 什么也不输出 ***如:3 4 -5 2 6 1 -2 0 对应输出是12 3 -10 1 6 0 (-2 0没对应的数字输出)

代码:

垃圾写法:

#include <iostream>
using namespace std;
void fun(int m, int n,int f)
{
	if (m==0&&n==0&f==0)
		cout <<"0 0"<< " ";
	else if (m != 0 && n != 0&&f==0)
		cout << m * n <<" "<< n - 1 << " ";
	else if (m != 0 && n == 0 && f == 0)
		cout <<" ";
	else if (m != 0 && n != 0 && f == 1)
		cout << m * n <<" "<<n - 1 <<endl;
}
int main()
{
	int n;
	int number[10000];
	int num = 0;
	while (scanf_s("%d",&n))
	{
		if (getchar()=='\n')
		{
			number[num++] = n;
			break;
		}
		number[num++] = n;
	}
	//cout <<num<< endl;
	//for (int i = 0; i < 10; i++)
	//{
	//	cout <<number[i]<<" ";
	//}
	//cout <<endl;
	int falg = 0;
	for (int i = 0; i <num; i=i+2)
	{
		if (i == 0 && number[i] != 0 && number[i + 1] == 0)
		{
			cout << "0 0" << endl;
		}
		if ((i+1)==(num-1))
			fun(number[i], number[i + 1],1);
		else
			fun(number[i], number[i + 1],0);
	}
	return 0;
}
//垃圾写法  

优化:

输入 while (cin>>n>>e)

用flag 来判断是否为第一次输入 ,不是第一次则输出 空格

链接:https://www.nowcoder.com/questionTerminal/2dae0a77c03e40c595881bc5d6074dfc
来源:牛客网

//每次输两个数n,e,注意以下几点:
//1.第一次输入没有空格,之后输入之前都需要一个空格,flag判断是否第一次
//2.如果求导系数为零,则不输出,判断语句if (n*e)
//3.如果输入的为零多项式,flag=false,则输出0 0
 #include <iostream>
using namespace std;
 
int main()
{
    int n, e;
    bool flag = false;
    while (cin>>n>>e)
    {
        if (n*e)
        {
            if (flag)
                cout<<" ";
            cout<<n*e<<" "<<e-1;
            flag = true;
        }
    }
    if (!flag)
        cout<<"0 0"<<endl;
 
    system("pause");
    return 0;
}

题目描述

NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。

输入描述:

测试数据包括多组。每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店的第from天和第to天。

输出描述:

对应每一组输入,输出从from到to这些天里(包含from和to两天),需要做多少份早餐。

输入例子:

1 10
2 8
36 80

思路:

斐波那契数列应用,如果 from == to 那就输出那天的人数。

代码:

#include <iostream>
long long number[81];
using namespace std;
void init()
{
	number[0] = 0;
	number[1] = 1;
	number[2] = 1;
	for (int i = 3; i <81; i++)
	{
		number[i] = number[i-1] + number[i - 2];
	}
}
int main()
{
	init();
	int  from, to;
	while (scanf_s("%d%d",&from,&to)!=EOF)
	{
		if (from==to)
		{
			cout <<number[to]<<" ";
		}
		else if (from>to)
		{
			break;
		}
		else 
		{
			long long num = 0;
			for (int i = from; i <=to; i++)
			{
				num = number[i]+num;
				//cout << number[i] << "--- "<< endl;
			}
			cout << num<< " ";
		}
		cout << endl;
	}
	return 0;
}
发布了96 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41852212/article/details/102526047