【每日编程-410期】复旦大学上机题(二)

教育   2025-01-08 10:01   广西  

复旦大学上机题(二)


每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399



解方程。给定一个字符串,代表一个一元一次方程。如果有解求解,输出格式“x=数字” ,如果解的个数无穷,输出 “infinite solutions”。如果没有解输出“no solution”

字符串长度不超过 256 。

输入格式:

输入一个一元一次方程,未知数用x表示。

输出格式:

输出 “x=数字” 或者 “infinite solutions”或者“no solution”

输入样例:

10x-2x-8=4x+7+x

输出样例:

x=5

解决方法:

(1)算法的基本思想:

边输入边检测字符,并同时将其分类存储,而不是在输入结束之后再检测字符。

(2)代码实现:

#include <stdio.h>
#include <ctype.h>
int main(void)
{
    int nFactor = 0;
    int nConstant = 0;
    int nFlags = 1;
    int nScanf;
    int nScanfRet;
    int nNextChar;
    char chChar = 0;
    while ((nNextChar = getchar()) != EOF && ungetc(nNextChar, stdin) != '\n')
    {
        if ((nScanfRet = scanf("%d", &nScanf)) != 1)
        {
            if (nNextChar == '-')
            {
                nScanf = -1;
            }
            else
            {
                nScanf = 1;
            }
            nScanfRet = 0;
        }
        nNextChar = getchar();
        if (isalpha(nNextChar))
        {
            chChar = (char)nNextChar;
            nFactor += nFlags * nScanf;
        }

        else if (nNextChar == '=')
        {
            nConstant += nScanfRet * nFlags * nScanf;
            nFlags = -nFlags;
        }
        else if (nNextChar == '\n')
        {
            nConstant += nScanfRet * nFlags * nScanf;
            break;
        }
        else
        {
            nConstant += nFlags * nScanf;
            ungetc(nNextChar, stdin);
        }
    }
    if ((double)nFactor == 0.0)
        if ((double)nConstant == 0.0)
            printf("infinite solutions");
        else
            printf("no solution");
    else
        printf("%c=%f\n", chChar, -(double)nConstant / nFactor);
    return 0;
}

明日预告:复旦大学上机题(二)
    骨牌。有2*n 的地板,用1*2和 2*1 的骨牌进行铺地板。问共有多少种情况。1<=n<=10000,  结果对 999983 取余。

输入格式:

输入n的值

输出格式:

输出多少种方法铺满地板

输入样例:

6

输出样例:

13


灰灰考研
最全的【计算机考研】【软件考研】考研信息! 最丰富的共享资料! 最大程度上帮助学渣狗登上研究生大门!
 最新文章