| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 42026 人关注过本帖, 47 人收藏
标题:C论坛算法团队 首战 西安电子科技大学OJ
只看楼主 加入收藏
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:0 
回复 149楼 beyondyf
不是和你提过挑战杯吗,我报的智慧养老院,是基于嵌入式开发方面的,配合下位机脉搏传感器,温度传感器什么,最后做成一个远程控制的web网络监控系统。

对了,杨大哥你搞过嵌入式吗?

编程之路定要走完……
2013-04-15 16:47
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 151楼 C_戴忠意
呵呵,玩过一点,不过都是基于51芯片的。一直想玩玩ARM,但一直没时间。

重剑无锋,大巧不工
2013-04-15 18:22
书中先生
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-25
收藏
得分:0 
用for语句很好解的
2013-04-15 21:09
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:0 
回复 152楼 beyondyf
51单片机的太初级了对于ARM来说,我现在感觉ARM太难学了。不过苦逼的坚持着呢,看能不能柳暗花明、

编程之路定要走完……
2013-04-16 19:00
情丨调
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-4-21
收藏
得分:0 
版主很牛逼  ,各种崇拜 ,才发现我就是个渣
2013-04-21 20:02
uushuo
Rank: 2
等 级:论坛游民
帖 子:13
专家分:31
注 册:2009-1-22
收藏
得分:0 
好久没做题了,今天看论文实在看的头大,就想把先前看到的一道水题AC掉,没想到还AC不掉
Pro1067
http://acm.xidian.
开始以为用法雷序列直接求就好了,没想到结果是TLE,想了半天没想出来优化的办法,各位acmer有什么建议没?
下面是我的代码,结果TLE
另外程序中有不严谨的地方:对于上界的处理(输入5 2测试结果是不对的),暂时先不想管
程序代码:
#include <stdio.h>

void find(double x,int max,int* pd,int* pn)
{
    int dSmall=0 ,nSmall=1,
        dBig = 1 ,nBig  =0;
    while(1)
    {
        int dCurr=dSmall+dBig;
        int nCurr=nSmall+nBig;
        if((double)dCurr/(double)nCurr > x)
            dBig = dCurr, nBig=nCurr,
            *pd = dSmall, *pn = nSmall;
        else
            dSmall=dCurr,nSmall=nCurr,
            *pd = dBig, *pn = nBig;
        if(dCurr>max || nCurr>max)
            return;
    }
}

int main(int argc, char *argv[])
{
    double a;
    int b;
    while(scanf("%lf%d",&a,&b))
    {
        int numerator,denominator;
        find(a,b,&denominator,&numerator);
        printf("%d %d\n",denominator,numerator);
    }
    return 0;
}


[ 本帖最后由 uushuo 于 2013-4-23 22:04 编辑 ]
2013-04-23 21:38
uushuo
Rank: 2
等 级:论坛游民
帖 子:13
专家分:31
注 册:2009-1-22
收藏
得分:0 
Pro1067
昨天脑子秀逗了,scanf遇到文件结尾的时候返回值不是0,而是EOF(值一般为-1),以前太习惯写while(cin>>xx)了,用scanf的时候太自信了,都没查手册
如果知道法雷序列的话,这确确实实是个水题

题目描述:
Description

祖冲之是中国古代著名的数学家,他不仅算出了圆周率的值在3.1415926与3.1415927之间。而且还按照当时使用分数计算的习惯给出了两个分数值的圆周率,分别是约率22/7与密率355/113。
祖冲之得到这两个数值的方法已经遗失,现在需要你找一个方法,可以使用一个分数来表示小数,使得这个分数非常逼近这个小数。
Input
每组一行,每行两个数,分别是需要你表示的小数0.1 < F < 10和以及数值范围L <= 20000
Output
一行两个数,它们之间使用一个空格分开,第一个是分子a,第二个是分母b,此处0 <= a, b <= L,要求a/b的值是分子分母小于L的分数中最接近F的那一对。
Sample Input
3.1415926536 10000
Sample Output
355 113
修改后的AC代码
程序代码:
#include <stdio.h>
void find(double x,unsigned int max,unsigned int* pd,unsigned int* pn)
{
    unsigned int dSmall=0 ,nSmall=1,
        dBig = 1 ,nBig  = 0;
    while(1)
    {
        unsigned int dCurr=dSmall+dBig;
        unsigned int nCurr=nSmall+nBig;
        if(dCurr>max || nCurr>max) break;
        if((double)dCurr/(double)nCurr > x)
            dBig = dCurr, nBig=nCurr;
        else
            dSmall=dCurr,nSmall=nCurr;
    }
    if((double)dBig/(double)nBig - x >
            x-(double)dSmall/(double)nSmall )
        *pd = dSmall,*pn = nSmall;
    else
        *pd = dBig,*pn = nBig;
    return;
}

int main(int argc, char *argv[])
{
    double a;
    unsigned int b;
    while(scanf("%lf%d",&a,&b)>0)
    {
        unsigned int numerator,denominator;
        find(a,b,&denominator,&numerator);
        printf("%d %d\n",denominator,numerator);
    }
    return 0;
}

但是还有不明白的地方:
浮点数不会引起除零错误吗?很好奇,前一段时间还特意看过浮点数的存储方法,零确实是一串二进制零啊
刚刚又测试了下:
    double x=1,y=0;
    printf("%e\n",x/y);

运行结果:
1.#INF00e+000
非常好奇这种结果,浮点数溢出是这个样子的- -而且测试发现,溢出的数仍然可以参与比较运算,比较的结果是正无穷==正无穷,应该仔细研究一下

[ 本帖最后由 uushuo 于 2013-4-24 13:46 编辑 ]
2013-04-24 13:28
Dua瀚狼
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:59
专家分:78
注 册:2012-3-11
收藏
得分:0 
这个oj不行啊,有没有A都得点status看,而且A的题在题目前没有体现,很忧伤!!!

我怀旧,因为我看不到未来。
2013-04-25 18:13
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 157楼 uushuo
可以参阅IEEE关于浮点数的标准。INF是一个特定值,可以参与运算,其尾数部分全为0,指数部分我记得是最大值。相关的还有NAN。

顺便回复楼上兄弟,西电OJ在登录后的目录页是有AC指示的,你通过的题目前面会有一个水滴状的图标。其实这些不重要,重要的是题目精确有趣。

西电OJ只是题目少了点,但质量都不错,还没发现错题及描述不准确的现象。

最后,欢迎各位的参与,有空多来解题交流算法心得

重剑无锋,大巧不工
2013-04-25 19:41
uushuo
Rank: 2
等 级:论坛游民
帖 子:13
专家分:31
注 册:2009-1-22
收藏
得分:0 
Pro1026 快速版
程序代码:
#include <stdio.h>
#include <math.h>

#define MAX 10000
int primeTable[MAX];
int primeCount=1;

int isPrime(int num)
{
    int i;
    for(i=0;i<primeCount&&primeTable[i]<sqrt(num)+1;i++)
        if(num%primeTable[i]==0) return 0;
    return 1;
}
void mkPrime(int end)
{
    int i;
    for(i=primeTable[primeCount-1]|0x01;i<end;i+=2)
        if(isPrime(i)) primeTable[primeCount++]=i;
}
int main(int argc, char *argv[])
{
    long n;
    primeTable[0]=2;
    mkPrime(50000);
    while(scanf("%ld",&n)&&n)
    {
        int i=0,bFirst=0;
        while(n!=1&&i<primeCount)
        {
            while(n%primeTable[i]==0)
            {
                if(bFirst++) printf("*");
                printf("%d",primeTable[i]);
                n/=primeTable[i];
            }
            i++;
        }
        if(i==primeCount)
        {
            if(bFirst++) printf("*");
            printf("%d",n);
        }
        printf("\n");
    }
    return 0;
}

这个题之前被解过,我只是试着加快了一下速度,耗时是12。主要还是看了题目的HINT。
不是很理解的是如果n不存在至少一个<50000的质因数,则n必为素数
这个怎么证明?
2^31-1太大了,求出到这个范围的素数。。。呵呵呵
另外很想知道前面的0ms的程序是怎么写的
2013-05-03 17:44
快速回复:C论坛算法团队 首战 西安电子科技大学OJ
数据加载中...
 
   



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

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