| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 483 人关注过本帖
标题:模问题~~
只看楼主 加入收藏
glovenone
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-11-3
收藏
 问题点数:0 回复次数:6 
模问题~~
#include <stdio.h>
int main()
{
    int n, m, i;
    while (1)
    {
        scanf("%d %d", &n, &m);
        if (m == 0 && n == 0)           /*遇到0 0程序停止*/
            break;
        else
        {
            int f[] = {0, 1, 2, 3, 0};
            if (n <= 3)
            printf("%d\n", (n % m + m) % m);
            if ((n > 3 && n <= 10000) && (m > 1 && m <= 10000))
            {
                for (i = 1; i <= n - 3; i++)
                {
                    f[0] = f[1];                        
                    f[1] = f[2];
                    f[2] = f[3];
                    f[3] = (f[0] + f[2]) % m;     //问题
                }
                printf("%d\n", f[3]);
            }
        }
    }
    return(0);
}


上面的   f[3] = (f[0] + f[2]) % m;   是什么意思啊
如果把  f[3]变了,那里面这个循环不就不能是f(n) = f(n - 1) + f(n - 3)了吗?
迷惑  ,不明白
这个是hit  的hoj 1987题
搜索更多相关主题的帖子: 求余 
2008-11-04 15:20
iamah
Rank: 1
等 级:新手上路
威 望:1
帖 子:69
专家分:0
注 册:2008-10-31
收藏
得分:0 
有点晕
2008-11-04 19:06
glovenone
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-11-3
收藏
得分:0 
原题是这样的
Recursive Function

--------------------------------------------------------------------------------

Time limit: 1sec. Submitted: 1743
Memory limit: 32M Accepted: 378

Source : SCU Programming Contest 2005 Preliminary

--------------------------------------------------------------------------------

Function f(n) is recursively defined as:

f(n) = f(n-1) + f(n-3), n > 3
f(n) = n, n <= 3
Write a program to calculate f(n) modulo m.

n <= 10000, 2 <= m <= 10000.

Input

There are multiple test cases. Each test case consists of two integers: n and m. n = 0 and m = 0 denotes the end of input, and you should not process this case.

Output

For each test case, print f(n) modulo m in a single line.

Sample Input

1 2
10000 999
0 0
Sample Output

1
433
2008-11-04 19:15
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
f(n) modulo m ---》f[n]%m

倚天照海花无数,流水高山心自知。
2008-11-04 19:21
glovenone
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-11-3
收藏
得分:0 
~~嘿嘿,看不懂什么意思啊~~
2008-11-05 20:00
glovenone
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-11-3
收藏
得分:0 
#include <stdio.h>

int main()
{
int n,s,t,pre_t,d;

while(scanf("%d",&n) && n>0)       //不明白~~~~~~~
{
pre_t=0;
d=0;

while(n>0)
{
scanf("%d %d",&s,&t);
d+=(t-pre_t)*s;
pre_t=t;
--n;
}

printf("%d miles\n",d);
}
return 0;
}

看到一个代码,但不明白其中while(scanf("%d",&n) && n>0)     while里面的东东表示什么意思啊~~    scanf("%d",&n) && n >0 表示怎么个数啊
scanf不就是输入吗,它还能表示数字?
2008-11-05 20:02
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
可以证明
如果k= a + b
则 k%m=(a%m+b%m)%m
程序代码:
#include<stdio.h>

int main()
{
    int n,m;
    int f[10000]={0,1,2,3};

    while(EOF!=(scanf("%d%d",&n,&m)))
    {
        for(int i = 4 ; i <= n ; i ++)
        {
            f[i]=(f[i-1]%m +f[i-3]%m)%m  ;

        }
        printf("%d\n",f[n]);
    }
    return 0 ;
}

倚天照海花无数,流水高山心自知。
2008-11-05 20:46
快速回复:模问题~~
数据加载中...
 
   



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

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