今天花了半个早上A出来的一道解一元一次方程的题目,题目链接为http://acm.fafu.edu.cn/problem.php?id=1354
解题报告:
1、先把等号找出,左右隔开
2、扫描含有未知字母,统计字母的系数
3、剩余的 数存入数组,左边+左边,右边+右边
4、算出结果
包含函数:
1、读入左侧数字的函数,
2、读入右侧数字的函数,
3、删除刚刚被读过的数字的函数
4、读入等号的位置
把问题细化后,等于解决每一个小问题,再结合到一块,就解出来啦!
代码如下(备注得很清楚了):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int az[100],ay[100]; //分别存等号左右被读入的数字
char s[100],sz[100],sy[100]; //分别存入方程及其左右部分式子
int locat; //记住等号的位置
int lens,lensz,lensy; //分别表示三个式子的长度
int xishu, zz, yy; //分别表示简化后未知数的总系数和左侧、右侧的和
int total_zy; // 表示简化后最后的数字
char ch;
void find_char()
{
int i;
for(i = 0; i < lens; i++)
{
if((s[i] >= '0'&&s[i] <= '9') || s[i] == '=' || s[i] == '+' || s[i] == '-')
continue;
else{ch = s[i];break;}
}
}
void find_locat()
{ int i;
for(i = 0; i < lens; i++)
{
if(s[i] == '=')
{
locat = i;break;
}
}
}
void seperate()
{
int i;
for(i = 0; i < locat; i++)
sz[i] = s[i];
for(i = locat+1; i < lens; i++)
sy[i-locat-1] = s[i];
lensz = strlen(sz); //记录左式子的长度
lensy = strlen(sy); //记录右式子的长度
}
void cnt_xishu()
{
int i, t, j;
int zxs = 0,yxs = 0; //