| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 17883 人关注过本帖, 8 人收藏
标题:第四届蓝桥杯本科B组C语言题
只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
/*
手工开根号:<span style="color: #008000; text-decoration: underline;">http://wenku.baidu.com/view/e048aa651eb91a37f1115c16.html[/color]
*/

#include <stdio.h>

#define LEN_RESULT     100
#define LEN            102

int comp(int *a, int *b, int n)
{    //return a > b;
    int i;

    for (i = n;i <= 2*n+1;++i)
    {
        if (a[i] < b[i])    return 0;
        if (a[i] > b[i])    return 1;
    }
    return 0;
}
/*
其实可以写乘法的,这里是变乘为加,
以为会更好写,结果画蛇添足

(20a+n+1)*(n+1) - (20a+n)*n = 20a+2*n+1
*/
void add(int *a, int *b, int *c, int n, int m)
{
    int i, j, res = 0;
    
    for (i = n*2+1;i >= n;c[i] = a[i], --i);
    for (i = n*2, j = n-1;j >= 0;--i, --j)
    {
        res += c[i] + b[j] * 2;
        c[i] = res % 10, res /= 10;
    }
    while (res)    c[i--] += res % 10, res /= 10;

    i = n * 2 + 1, res = m * 2 + 1;
    while (res)
    {
        res += c[i];
        c[i--] = res % 10, res /= 10;
    }
}

void sub(int *a, int *b, int n)
{
    int i, j;

    for (i = n*2+1;i >= n;--i)
    {
        a[j = i] -= b[i];
        while (a[j] < 0)    a[j] += 10, --a[--j];
    }
}
/*
得到 结果 a的第 n位,试商。
tmp[n] = (20a + n) * n
*/
int get_ans(int *a, int *b, int n)
{
    int i, j, tmp[10][LEN*2] = {0};

    for (i = n*2, j = n-1;j >= 0;--i, --j)
        tmp[0][i] = a[j] * 2;

    tmp[0][n*2+1] = 1;
    if (comp(tmp[0], b, n))    return 0;

    for (i = 1;i < 10;++i)
    {
        add(tmp[i-1], a, tmp[i], n, i);
        if (comp(tmp[i], b, n))    break;
    }
    sub(b, tmp[i-1], n);
    return i;
}

void fun(int *a, int *b)
{
    int i;

    //a = sqrt(5);
    for (i = 0;i <= LEN_RESULT;++i)
    {
        a[i] = get_ans(a, b, i);
    }

    //ans = ( sqrt(5) - 1 ) / 2
    for (a[0]--, i = 0;i < LEN_RESULT;++i)
    {
        a[i+1] += (a[i] % 2) * 10;
        a[i] /= 2;
    }
}

int main()
{
    int i, ans[LEN] = {0};
    int s[LEN*2] = {0, 5};
    
    fun(ans, s);

    for (i = 0; i < LEN_RESULT;++i)
        printf("%d", ans[i]);
    printf("\n");
    return 0;
}


[fly]存在即是合理[/fly]
2013-05-19 22:56
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
以下是引用wsws23在2013-5-18 11:26:55的发言:

就是在西安电子科技大学OJ上的 Problem 1005 - 跳舞毯 中的  算法里面 几个数组里存放的数据的具体含义 以及 那些变量的
含义 为什么初始化成

    for(p1[0] = i = 0; i < s1n; i++) p1 = p1 + b; 什么的
有点看不明白  能分析下吗

狠狠的忙了两天,终于可以休息一下了呵呵

在解释代码前我想问一下,这贴子代码上面我的算法分析看懂了么?

重剑无锋,大巧不工
2013-05-21 11:19
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
收藏
得分:0 
  我在网上查了一下好像是 字符串编辑 算法
可恨我愚笨 就是没看懂啊
2013-05-21 13:50
Sunnyherb
Rank: 1
来 自:广西
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-6
收藏
得分:0 
我没参加,那不是亏了!???

做自己的事,走自己的路!
2013-05-22 22:07
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
以下是引用Sunnyherb在2013-5-22 22:07:46的发言:

我没参加,那不是亏了!???

实名验证没通过,同亏。。。


[fly]存在即是合理[/fly]
2013-05-23 11:16
a2435566846
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-5-23
收藏
得分:0 
一起做
2013-05-23 22:56
流年226
Rank: 1
等 级:新手上路
帖 子:37
专家分:7
注 册:2013-4-27
收藏
得分:0 
郁闷了,不会啊
2013-05-25 21:55
浮云之冰雪
Rank: 2
等 级:论坛游民
帖 子:74
专家分:89
注 册:2013-5-11
收藏
得分:0 
回复 9楼 beyondyf
A组题讨论结果在何方?

潇洒不可少!
2013-05-27 11:51
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 78楼 浮云之冰雪
。。。

找错了。。。


[fly]存在即是合理[/fly]
2013-05-27 14:02
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:0 

俺是来看大家的答案的
主要是学习哈
2013-05-30 10:28
快速回复:第四届蓝桥杯本科B组C语言题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019574 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved