蓝桥杯算法训练C语言---二元函数

该博客主要介绍了如何使用C语言解决蓝桥杯竞赛中的二元函数问题。根据题目描述,函数f(x,y)=ax+by,其中a和b为整数。合法的表达式可以通过递归的方式构建,例如f(A,B)。博客提供了一个样例输入和输出,并提示在使用某些编程语言时需要注意头文件的包含。" 82979534,5115755,PostgreSQL 数据转换:行转列实战,"['数据库', 'SQL', '数据操作', 'PostgreSQL函数', '数据转换']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
  令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值。
  只有满足以下要求的表达式才是合法的:
  1.任意整数x是一个合法的表达式;
  2.如果A和B都是合法的表达式,则f(A,B)也是一个合法的表达式。
输入格式
  第一行两个数a和b;
  第二行一个字符串S表示要求的表达式。
输出格式
  一行一个数表示表达式S的值。
样例输入
1 2
f(1,f(1,-1))
样例输出
-1
数据规模和约定
  S的长度不超过50,运算过程中所有变量不会超出int的范围。

AC:

#include<stdio.h>
#include<stack>//使用栈的头文件 
#include<cctype>//判断是否是数字的头文件
using namespace std;//将所有变量名字储存在std这个空间里,避免和系统变量名发生冲突 
int a,b,temp;
char str[50];
int f(int x,int y)//二元函数 
{
	return a*x+b*y;
}
int getNumber(int i,bool m)//i是当前下标,m用于判断是否为负数 
{
	int num=0;
	for(;isdigit(str[i]);i++)//判断是否为数字
	{
		num=num*10+str[i]-'0';//从最高位开始往后加 
	} 
	temp=i;//数字存完之后i要跳到后面
	if(m)//判断是否为负数
	{
		num=-num;
	} 
	return num;
}
int main()
{
	scanf("%d%d\n",&a,&b);
	gets(str);
	stack<int> num;//创建一个栈用来储存x和y 
	num.push(0);//先初始化 
	for(int i=0;i<50;i++)
	{
		if(str[i]=='-')
		{
			i++;
			num.push(getNumber(i,true));//true表示是负数,让负号和后面的数字进栈
			i=temp; 
		}
		else if(isdigit(str[i]))
		{
			num.push(getNumber(i,false));//正数进栈
			i=temp; 
		}
		if(str[i]==')')//当一次函数的xy已经都进栈后需要调用二次函数 
		{
			int y=num.top();
			num.pop();
			int x=num.top();
			num.pop();
			num.push(f(x,y));//把结果输入进栈作为下一次函数的参数 
		}
	}
	printf("%d",num.top());
	return 0;
}

ps:测评语言换成c++,不然会报错说找不到stack这个头文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值