|
|
发表于 2012-11-20 01:17:30
|
显示全部楼层
本帖最后由 仰望天上的光 于 2012-11-20 15:23 编辑
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX_NUM 50000
- int* init();
- void deal_all( int* pData );
- void deal_one_time( int* pData, int n );
- void destroy( int* pData );
- int main( void ) {
- int* pData;
- pData = init();
- deal_all( pData );
- destroy( pData );
- }
- int* init() {
- //数组下标0不用
- int* result = (int*)malloc( (MAX_NUM+1) * sizeof(int) );
- return result;
- }
- void destroy( int* pData ) {
- free( pData );
- }
- void deal_all( int* pData ) {
- int times, i;
- scanf("%d",×);
- for(i=0; i<times; ++i) {
- int n;
- scanf("%d", &n);
- deal_one_time( pData, n );
- }
- }
- void deal_one_time( int* pData, int n ) {
- int max_vec[200]={1};//最大值下标数组
- int count=1;//最大值个数
- int pre_max = 1;//初始的最大值
- int i = 2;
- for( pData[1]=1; i <= n; ++i ) {
- //求pData[i]
- if( i%2==0 ) pData[i] = pData[i/2];
- else pData[i] = pData[i/2] + pData[i/2+1];
- //处理最大值
- if( pData[i]>pre_max ) {
- pre_max = pData[i];
- count = 0;
- max_vec[count++] = i;
- }else if( pData[i] == pre_max ) {
- max_vec[count++] = i;
- }
- }
- //打印结果
- printf("%d %d %d ", pData[n], pre_max, count);
- for( i=0; i< count; ++i ) printf("%d ", max_vec[i]);
- printf("\n");
- }
复制代码 |
|