“英特尔杯”全国计算机多核程序设计大赛复赛试题-第一题

本文介绍了一种算法思路,用于从大量单精度浮点数中找出乘积最大的连续四个数,并给出了实现该功能的C语言程序框架。讨论了通过遍历方式处理数据的方法。

问题描述:

从一单精度浮点数串中找出乘积最大的连续的4个浮点数。例如在下列浮点数串[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 5.0, 3.0, 3.0, 2.0, 9.0, 1.0, 2.0]找到[4.05.06.05.0].

命令行:

> answer1 data1.dat

输入文件格式:

含有以二进制形式存放的浮点数的文件, 浮点数数量大概在若干千万。

输出结果:

打印该连续4个单元的首单元序号(以零为起始),以及该连续4个单元的乘积。

程序框架:

 

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <unistd.h>

#include <alloc.h>

 

int main(int argc, char *argv[])

{

float *farray, product;

struct stat buf;

int num,index;

 

/********************************/

ifstat(argv[1],&buf))  // get the file size

{

      printf("The file does not exist/n");

exit(0);

}

num = buf.st_size/sizeof(float);

farray = (float *)malloc(buf.st_size);

FILE *fp=fopen(argv[1],"rb");

fread( farray, sizeof(float), num, fp);

fclose(fp);

/********************************/

 

  /*在这里处理数据*/

 

  /********************************/

/*输出结果*/

printf("乘积=%f 首数的序号=%d/n", product, index);

free(farray);

/********************************/

}

 

最先能想到的想法就是遍历,需要做4*n次浮点数乘法.

暂时还没有别的好办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值