• EOJ-2891 多次函数


    http://acm.cs.ecnu.edu.cn/problem.php?problemid=2891

    题意:给出一个函数解析式,画出其在定义域及值域为[-20,20]内的函数图像

    用一个数组记录每个次数前对应的系数。需要注意的是算出的函数值对数组下标的转换

     1 #include<map>
     2 #include<set>
     3 #include<list>
     4 #include<cmath>
     5 #include<ctime>
     6 #include<queue>
     7 #include<stack>
     8 #include<cctype>
     9 #include<cstdio>
    10 #include<string>
    11 #include<cstdlib>
    12 #include<cstring>
    13 #include<iostream>
    14 #include<algorithm>
    15 using namespace std;
    16 char mat[41][41];
    17 int ans[4];
    18 void init(){
    19     for(int i=0;i<=40;i++)
    20         for(int j=0;j<=40;j++){
    21             if(i==20){                            //初始化特别考虑第20列以及20行即可,注意原点为'+'
    22                 if(j==20)mat[i][j]='+';
    23                 else if(j==40) mat[i][j]='>';
    24                 else mat[i][j]='-';
    25                 continue;
    26             }
    27             if(j==20){
    28                 if(i==0)mat[i][j]='^';
    29                 else mat[i][j]='|';
    30                 continue;
    31             }
    32             mat[i][j]='.';
    33         }
    34 }
    35 void draw(){
    36     for(int i=0;i<=40;i++){
    37         for(int j=0;j<=40;j++)
    38             putchar(mat[i][j]);
    39         printf("
    ");
    40     }
    41 }
    42 void read(char *fx){
    43     int len=strlen(fx);
    44     int sym=1,temp=0;                        //sym表示符号,temp存放系数
    45     memset(ans,0,sizeof(ans));                //初始化为0
    46     for(int i=5;i<len;i++){
    47         if(isdigit(fx[i])){
    48             temp=temp*10+(fx[i]-'0')*sym;    //数字可能有多位
    49             if(i==len-1)                    //对常数项的特殊处理,将0次幂对应的系数存入
    50                 ans[0]=temp;
    51         }
    52         if(fx[i]=='+')
    53             sym=1;
    54         if(fx[i]=='-')
    55             sym=-1;
    56         if(fx[i]=='x'){                        //读到x时进行系数的处理
    57             if(temp==0)                        //对省略系数1的特殊处理
    58                 temp=sym;
    59             if(fx[i+1]=='^'){
    60                 ans[fx[i+2]-'0']=temp;        //将次幂数组存入对应系数
    61                 i+=2;                        //记住要向后移位,跳过次幂的读入
    62             }
    63             else
    64                 ans[1]=temp;                //对一次幂的特殊处理
    65             temp=0;                            //清空系数
    66         }
    67     }
    68 }
    69 int F(int x){
    70     int ret=0;
    71     for(int i=0;i<4;i++)
    72         ret+=ans[i]*pow(1.0*x,i);        //计算对应y值,ans下标表示次幂
    73     return ret;
    74 }
    75 int main(){
    76     char fx[30];
    77     while(cin>>fx){
    78         init();                            //初始化
    79         read(fx);                        //读入数据,存入数组
    80         for(int i=-20;i<=20;i++){
    81             int pt=F(i);                //计算对应的y
    82             if(pt>=-20 && pt<=20)
    83                 mat[20-pt][i+20]='*';    //在图内则描点,注意y值是行,且向下会越来越小
    84         }
    85         draw();                            //画图
    86     }
    87     return 0;
    88 }
    View Code
  • 相关阅读:
    typedef void (*funcptr)(void) typedef void (*PFV)(); typedef int32_t (*PFI)();
    STM32 STM32F4 寄存器怎么配置不上, 无法往寄存器写入数据
    GPIO
    JSP和selevt 生命周期详解(JSP的生命周期和select很像,jsp底层就是一个selevt)
    jquery自带的排序方法(js也是)
    GET和POST是HTTP请求的两种基本方法,区别是什么!?
    springboot特性
    restful风格接口类型和优点
    提升必看!!!
    分组函数 partition by 的详解,与order by 区别
  • 原文地址:https://www.cnblogs.com/KimKyeYu/p/3153264.html
Copyright © 2020-2023  润新知