c语言的一道小问题。。。谢谢

问题描述

c语言的一道小问题。。。谢谢

“3”是聚会时大家非常喜欢玩的一款游戏。现在定义游戏规则如下:

n个人围成一圈,序号分别为1-n,从1号玩家从1开始报数。

如果有玩家报的数是3的倍数或者个位数字为3的玩家退出游戏,下一位玩家继续之前的玩家报数,直到场上只剩下1名玩家,这名玩家就是游戏的胜利者。

比如有10个玩家时,对应的游戏过程如下:

所以最后是5号玩家胜利。

现在给出玩家个数n,请输出最终胜利的玩家序号。

输入格式
仅1行,表示参与游戏的玩家个数。

测试用例中,n小于等于65535大于等于1。

输出格式
输出胜利的玩家序号。

#include
int fac3(int n)
{
int a[65535][65535]={0},i,k;
static int l=0;
k=0;
for(i=0;i<n;i++)
{a[l][i]=l*n+i+1;}
for(i=0;i<n;i++)
{
if(a[l][i]!=0||a[l][i]-10*i!=3)
{
a[l+1][k]=a[l][i];
k++;
}
}
l++;

fac3(k);
if(k==1)
{
    for(i=0;i<n;i++)
    if(a[l-1][0]==a[0][i])
    return i;
}

}
int main()
{
int n,m;
scanf("%d",&n);
m=fac3(n);
printf("%d",m);

}

为什么一运行就崩溃啊?希望有好心人帮改一下,谢谢。。。(预处理指令粘贴不上麻烦加一下)

解决方案

a[65535][65535]
这会开一个4GB大小的数组,你的计算机根本分配不了这么多内存。
这就是一个约瑟夫环问题,自己google下看看别人怎么写的。

解决方案二:

因为不支持这么大的 Stack,可以考虑使用 malloc 来分析空间

解决方案三:

给你提供一个思路,把int a[65535][65535]={0}放到main()函数的外面作为全局变量放到静态存储区,那么就可以申请到很大的内存了。因为你要是
把它作为局部变量放到堆栈中势必会导致溢出问题。作为全局变量就可以编译通过了。

解决方案四:

上面的哥们写得对,没必要分配那么大的静态区间。

解决方案五:

楼上说的对,数组太大了,栈段根本不够用。

解决方案六:

给你提供一个思路,把int a[65535][65535]={0}放到main()函数的外面作为全局变量放到静态存储区,那么就可以申请到很大的内存了。因为你要是
把它作为局部变量放到堆栈中势必会导致溢出问题。作为全局变量就可以编译通过了。

解决方案七:

没必要开二维数组……这是算把比赛的题目?用最笨的办法如下所示……

 #include <stdio.h>

int main()
{
    int n, a[70000], i, m, num = 1, flag = 0;
    scanf("%d", &n);
    m = n;
    while(1)
    {
        for(i = 0; i < n; i++)
        {
            if(a[i] != -1)
            {
                a[i] = num++;
                if(a[i] % 3 == 0 || a[i] % 10 == 3)
                {
                    a[i] = -1;
                    m--;
                    if(m == 1)
                    {
                        flag = 1;
                        break;
                    }
                }
            }
        }
        if(flag)
            break;
    }
    for(i = 0; i < n; i++)
        if(a[i] != -1)
            printf("%dn", i + 1);
    return 0;
}

解决方案八:

写代码有点理想了。。

解决方案九:

可以参见博文C语言经典编程之数组(围圈报数)

#include

int main(void)
{
int m = 0;//人数
int n = 0;//报数
int a[10] = {};
int i = 0, j = 0, k = 0;//k表示目前出圈的人数
// printf("input:");
scanf("%d %d", &m, &n);
// printf("input:");
for(i = 1; i <= m; i++)
{

a[i] = 1;
}

i = 1;
while(1)
{
    if(a[i] == 1)
    {
        j++;
    }
    if(j == n)
    {
        a[i] = 0;
        j = 0;
        k++;
    }
    if(k == m - 1)
        break;

    i++;

    if(i > m)
    {
        i = 1;
    }
}

// printf("output:n");

for(i = 1; i <= m; i++)
{
    if(a[i] == 1)
        printf("%dn", i);
}

return 0;

}

解决方案十:

int a[65535][65535],这个数组太大了吧 65535 * 65535 = 4294836225 ,如果 int占2个byte的话,这需要8G的内存,算法不合理

时间: 2024-09-04 10:28:59

c语言的一道小问题。。。谢谢的相关文章

刚学c语言出了小问题。。大神棒棒看 谢谢

问题描述 刚学c语言出了小问题..大神棒棒看 谢谢 一个计算日期距离的玩意 #include int sr(); int main() { printf("请输入起始年月日(以回车间隔) "); int memories; int year = sr(); int month = sr(); int day = sr(); printf("请输入当前年月日(以回车间隔) "); int thisyear = sr(); int thismonth = sr(); i

测试-本想牛刀小试没想到刀被砍卷刃了 一道小题 新手求指点 谢谢了

问题描述 本想牛刀小试没想到刀被砍卷刃了 一道小题 新手求指点 谢谢了 输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1, y1, x2, y2... xn, yn),为了简化问题,这里的所有坐标都用整数表示. 输入数据中所有的整数都在32位整数范围内,n=0表示数据的结束,不做处理. Output 对于每个测试实例,请输出对应的多边形面积,结果精确到小数点后一位小数

c语言-C语言的简单问题求解,谢谢了

问题描述 C语言的简单问题求解,谢谢了 ACM上一道简单的题Description计算:t=1-1/(2*2)-1/(3*3)-...-1/(m*m) Input整型变量m Outputt(保留六位小数) Sample Input10Sample Output0.450232 我的代码#include #include int main(){ int mn; float t=1; do{ scanf(""%d""&m); }while(m<1); fo

javascript-JS里全局全局变量的小问题,谢谢啦

问题描述 JS里全局全局变量的小问题,谢谢啦 如果把选框内的代码挪到箭头的位置,为什么图片隐身这个效果就实现不了呢? 函数外面放一个用alert(value); 弹出来的value的值一直是变化的, 为什么document.getElementById('pic').style.opacity=value/100;放到函数外面, value的值就传递不进来了? 解决方案 放在外面就不属于函数了,那么它只会执行一次.不会随定时器执行. 解决方案二: 没有执行,不在function内部,没有触发它执

c c++-关于C语言中的小问题,不知道怎么回事!

问题描述 关于C语言中的小问题,不知道怎么回事! #includeint main() { double i;i=1/3; printf(""%f ""i); return 0; }输出怎么不是0.333333而是0.00000?想不明白!麻烦大家帮帮忙!谢谢 解决方案 i=1.0 / 3; 改成这样, 1/3会取整,所以是0,然后赋值给i故i就是0了 解决方案二: double对应的转义符是%lf而不是你写的%f 解决方案三: 一个整数除一个整数是没有小数位的,1

C语言实现五子棋小游戏_C 语言

首先我们先来看一个稍微简单些的实现方式: #include <stdio.h> #include <stdlib.h> #define N 15 int chessboard[N + 1][N + 1] = { 0 }; int whoseTurn = 0; void initGame(void); void printChessboard(void); void playChess(void); int judge(int, int); int main(void) { init

c语言-C语言的一个小问题 求解答

问题描述 C语言的一个小问题 求解答 计算机问题求解答">如题 我的代码是这样 #includeint main(){ double xy; printf(""输入数据:""); scanf(""%lf""&x); if(x<1) y=x;else if(x>=1&&x<=10) y=2*x-1;else if(x>10) y=3*x-11;printf(&quo

div布局-HTML中PNG图片的绝对定位的小问题,谢谢了

问题描述 HTML中PNG图片的绝对定位的小问题,谢谢了 <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style> *{margin:0; padding:0;} .A{background:#ccc; width:800px; height:50px; position:relative; top

html-CSS优先级的小问题,谢谢了

问题描述 CSS优先级的小问题,谢谢了 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <style> .main{width:200px; height:200px; background:black;} .main ul li{backgrou