| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 14433 人关注过本帖, 9 人收藏
标题:游戏:消三连色(已完成)
只看楼主 加入收藏
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
首先看成绩单的数据结构:
struct
{
    char name[10];                   //姓名
    int score;                       //成绩
    long tt;                         //记录产生的时间(代码里没涉及)
    int crc;                         //crc就是用来校验的
}tempscore,scorefile[5];             //用于存储游戏成绩

校验函数:
int crc(int p)
{
    int i,j=0;
    for(i=0;scorefile[p].name[i]&&i<10;i++)j+=scorefile[p].name[i];
    j^=scorefile[p].score;
    j^=scorefile[p].tt;
    if(!scorefile[p].score)j=scorefile[p].crc;
    return j;
}

读取成绩单文件时判断校验码是否相等,如不等则说明有人修改了成绩单文件数据,该项成绩直接清零

void loadscore()
{//读取游戏成绩
    int i,j;
    FILE *f;
    for(i=0;i<5;i++)scorefile[i].score=0;
    if((f=fopen("score.dat","rb"))==NULL)return;
    fread(scorefile,sizeof(scorefile),1,f);
    fclose(f);
    for(i=0;i<5;i++)
    {
        if(crc(i)!=scorefile[i].crc)scorefile[i].score=0;   //这里判断校验码不相等的处理
    }
    sortscore();
}
2017-04-01 20:11
卢羽R
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-4-2
收藏
得分:0 
wo 测试的时候 为啥窗口会闪退啊
2017-04-02 18:12
两切
Rank: 2
等 级:论坛游民
帖 子:10
专家分:14
注 册:2017-4-2
收藏
得分:0 
回复 2楼 xzlxzlxzl
好牛逼的样子。让我感觉我啥都不会
2017-04-02 19:57
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
回复 22楼 卢羽R
本代码只能在windows下编译器编译,不适用linux,vc、vs下一般能正常编译,其他编译器未试,建议注释掉“#include "stdafx.h"”。
2017-04-03 07:47
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
谢谢前辈分享

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2017-04-03 12:26
peter张
Rank: 2
等 级:论坛游民
威 望:1
帖 子:56
专家分:98
注 册:2017-3-7
收藏
得分:0 
占楼学习!
2017-04-09 21:06
回头笑
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-12-13
收藏
得分:0 
回复 2楼 xzlxzlxzl
楼主厉害!
2017-04-09 22:27
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 2楼 xzlxzlxzl
1到10亿质数和。来自网友的智慧
程序代码:
以下是网友的回答:
写了一个纯c版本的

代码如下 : https://gist.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <stdint.h>

#include <math.h>
#define MAX 1000000000

int main()
{
    bool *state = (bool *)malloc(sizeof(bool) * (MAX+1));
    int64_t sq = sqrt(MAX);
       

    for(int64_t i = 2; i<= sq; ++ i)
    {
        if(!state[i])
        {
            for(int64_t j = i*i; j <= MAX; j += i) {
                state[j] = true;
            }
        }
    }

    int64_t num = 0, sum = 0;
    for(int64_t i = 2; i <= MAX; ++ i)
    {   

        if(!state[i]) {
            num ++;
            sum += i;
        }
    }
    free(state);

    printf("num = %lld, sum = %lld\n ", num, sum);
    return 0;
}




φ(゜▽゜*)♪
2017-05-10 13:12
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 28楼 书生牛犊
for(int64_t j = i*i; j <= MAX; j += i)
这样出现 MAX的字眼一看就知道会超时~
10亿以内求质数用筛法会超时~即使单纯用欧拉筛遍历素数表一次效率也不高~记得是先排除所有2的倍数~再排除所有3的倍数~~这样求根号n以内的素数就可以了~难点是怎么处理倍数重复的问题~这个现在我理解上来还是有点牵强~到时有时间再来消化一下~

PS:我曾经试过用这种方法手工推导100以内有25个质数~不过感觉实现算法实现难度不少~代码没有整理出来~这种方法不能确定大于根号n的数是否为素数~不过却可以求出n以内的素数的个数~求和在求倍数个数的基础上弄点求和方面的知识就行了~就是在处理重复倍数上面卡了很久~最后还是要靠手工慢慢推导出来~记得好像有个递推渗透的过程~现在具体也说不上来~~不过感觉思路应该是这样的~

[此贴子已经被作者于2017-5-10 14:29编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-10 14:14
宿梦梦
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-5-14
收藏
得分:0 
为什么这个代码我复制到code block中运行不出来啊
2017-05-14 13:48
快速回复:游戏:消三连色(已完成)
数据加载中...
 
   



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

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