鱼C论坛

 找回密码
 立即注册
查看: 3596|回复: 7

是关于多项式求和的问题 但不知道为什么运行不了

[复制链接]
发表于 2017-4-22 21:37:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a,b;
  5.         const int number = 100;
  6.         int f1[number],f2[number],f[number];
  7.         int i,j;
  8.         for( i=0 ; i<number ; i++ ){
  9.                 f1[i] = 0;
  10.                 f2[i] = 0;
  11.                 f[i] = 0;
  12.         }
  13.        
  14.         if(a>=0 && a<=100){
  15.         do{
  16.         scanf("%d %d",&a,&b);
  17.         f1[a] = b;
  18.         }while(a != 0);
  19.         do{
  20.         scanf("%d %d",&a,&b);
  21.         f2[a] = b;
  22.         }while(a != 0);
  23.         }
  24.        
  25.         int length1 = sizeof(f1[number])/sizeof(f1[0]);
  26.         int length2 = sizeof(f2[number])/sizeof(f2[0]);
  27.        
  28.        
  29.         for( i=0 ; i<length1 ; i++ ){
  30.                 for( j=0 ; j<length2 ; j++ ){
  31.                         f[i] = f1[i] + f2[i];
  32.                 }
  33.         }  
  34.         int length = sizeof(f[number])/sizeof(f[0]);
  35.         for( i=length-1 ; i>=0 ;i-- ){
  36.                 if(i == 0){
  37.                         printf("%d",f[i]);
  38.                 }else if(f[i] == 0){
  39.                         printf("");
  40.                 }else{
  41.                         printf("%dx%d+",f[i],i);
  42.                 }
  43.         }
  44.         printf("\b ");     
  45.         return 0;
  46. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-4-22 23:28:30 | 显示全部楼层
本帖最后由 lumber2388779 于 2017-4-22 23:29 编辑

a没有任何赋值就进行比较if(a>=0 && a<=100)

int length1 = sizeof(f1[number])/sizeof(f1[0]);
int length2 = sizeof(f2[number])/sizeof(f2[0]);
这两句计算方法不对 f1[number]和f2[number]都是具体的数值,都是int类型与f1[0] f2[0]都是一致的,算出来都是1,而且sizeof计算f1和f2算出来的都是总长度就是100*4 4为int类型的字节数
在上边你可以给一个统计输入数字个数的下边用于控制就可以
  1. if(a>=0 && a<=100){
  2.         do{
  3.         scanf("%d %d",&a,&b);
  4.         f1[a] = b;
  5.         }while(a != 0);
  6.         do{
  7.         scanf("%d %d",&a,&b);
  8.         f2[a] = b;
  9.         }while(a != 0);
  10.         }
复制代码

感觉这段有点太复杂,用for循环控制输入两个数分别给f1和f2,判断输入的值不是0就可以继续输入
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-23 19:13:19 | 显示全部楼层
lumber2388779 发表于 2017-4-22 23:28
a没有任何赋值就进行比较if(a>=0 && a

这是题目
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。

输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。

输出格式:
从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。

输入样例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20

输出样例:
4x6+6x5+12x3+12x2+12x+40
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-23 20:33:14 | 显示全部楼层
星若有泪 发表于 2017-4-23 19:13
这是题目
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:

你的程序稍微修改下就可以了,因为第一个输入的数一定是最高次幂,那么输入第一次的时候将这个存到有个变量中然后比较两个多项式这个变量的大小,以大的开始计算,从大到0开始计算出所有的,然后再显示出来就可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-26 20:08:00 | 显示全部楼层
lumber2388779 发表于 2017-4-23 20:33
你的程序稍微修改下就可以了,因为第一个输入的数一定是最高次幂,那么输入第一次的时候将这个存到有个变 ...
  1.         int a,b,c;
  2.         scanf("%d %d",&a,&b);
  3.         const int number = 101;
  4.         int f1[number],f2[number],f[number];
  5.         int i,j;
  6.         for( i=0 ; i<number ; i++ ){
  7.                 f1[i] = 0;
  8.                 f2[i] = 0;
  9.                 f[i] = 0;
  10.         }
  11.         f1[a] = b;
  12.         c = b;
  13.        
  14.         while(a>= 0 && a <= 101){
  15.                 while(a != 0){
  16.                         scanf("%d %d",&a,&b);
  17.                         if(c >= b){
  18.                                 f1[a] = b;
  19.                         }
  20.                 }
  21.                 if(a ==0)break;
  22.         }
  23.     scanf("%d %d",&a,&b);
  24.     f2[a] = b;
  25.     c = b;
  26.     while(a >= 0 && a <= 101){
  27.             while(a != 0){
  28.                     scanf("%d %d",&a,&b);
  29.                     if(c >= b){
  30.                             f2[a] = b;
  31.                         }
  32.                 }
  33.                 if(a == 0)break;
  34.         }
复制代码


感觉越改越复杂了  我实现不了如果 输入的幂次>第一次输入的幂次  就停止继续输入这个功能,该怎么改?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-26 20:13:59 | 显示全部楼层
星若有泪 发表于 2017-4-26 20:08
感觉越改越复杂了  我实现不了如果 输入的幂次>第一次输入的幂次  就停止继续输入这个功能,该怎么改 ...

我抽空帮你看下吧,最近有点忙
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-26 21:18:42 | 显示全部楼层
lumber2388779 发表于 2017-4-26 20:13
我抽空帮你看下吧,最近有点忙

嗯嗯  谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-27 10:11:27 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a,b;
  5.         const int number = 100;
  6.         int f1[number],f2[number],f[number];
  7.         int i,j;
  8.         int lenf1,lenf2
  9.         for( i=0 ; i<number ; i++ ){
  10.                 f1[i] = 0;
  11.                 f2[i] = 0;
  12.                 f[i] = 0;
  13.         }
  14.         
  15.         scanf("%d %d",a,b);
  16.         lenf1=a;
  17.         while(a >0)
  18.         {f1[a]=b;
  19.         scanf("%d %d",a,b);}
  20.         f1[a]=b;

  21.         scanf("%d %d",a,b);
  22.         lenf2=a;
  23.         while(a >0)
  24.         {f2[a]=b;
  25.         scanf("%d %d",a,b);}
  26.         f2[a]=b;
  27.         int len=lenf1>lenf2?lenf1:lenf2;
  28.         for( i=len ; i>=0 ; i--){
  29.                 f[i]=f1[i]+f2[i];
  30.                 if(i == 0){
  31.                         printf("%d",f[i]);
  32.                 }
  33.                 else if(f[i]==1)
  34.                 {printf("%dx+",f[i]);}
  35.                 else if(f[i] == 0){
  36.                         printf("");
  37.                 }else{
  38.                         printf("%dx%d+",f[i],i);
  39.                 }
  40.                 }
  41.         }  
  42.         
  43.         printf("\b ");
  44.         return 0;
  45. }
复制代码


这是代码,自己研究思考下,不懂问我,手机打的,可能会有语法错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表