彩票中了几位数

这篇博客介绍了如何使用C和Java编程语言分别实现随机生成七位数彩票号码,并检查用户输入的号码与开奖号码的匹配程度。作者在C语言版本中遇到了关于随机数生成、数组处理的挑战,而在Java版本中这些问题得到了简化。博客内容涵盖了随机数生成、数组操作以及简单的数学比较,展示了两种不同语言处理相同问题的差异。
摘要由CSDN通过智能技术生成

思路:
随机生成一个七位数为开奖号码。自己输入一个七位数为自己买的彩票。
然后写一个函数把七位数分解为一个数组,把开奖号码和自己的号码都传进去,然后得到两个数组,在比较对应位数上的值看中了几位数。

太久没写C了,碰到好多问题。
首先,rand()函数生成的随机数只能到32767,为了生成大一点的随机数用了两个rand()相乘
然后将数值分割成数组这个功能要调用两次,肯定得写一个方法来调。C语言函数的返回值是没有数组类型的,只能返回一个指针,指向数组首地址。这里又涉及到一些问题。首先就是在函数内定义一个数组,别人调用它的获取返回值的时候,这个局部变量的数组的已经被释放了。一个方法就是在函数内定义成static的数组,但是两次调用这个函数的时候返回的都是同一个数组的地址。没办法调两次。然后我就在参数里面传了个指针进去,在调用函数内部就把数组声明了,传进去之后再返回还没有被释放。。。。感觉好像有点愚蠢,看起来好冗余啊。。。我也不知道怎么写了。。。。
可以看一下这个链接 https://www.cnblogs.com/weilongZhang/p/14341622.htmlv

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
unsigned numof(long a, long b);
int* split(long num,int* ab);
int main()
{
	long b = 0;
	//srand(time(NULL));来生成以当前时间为种子的随机数.去掉这一句每次运行产生的随机数都是一样的
	srand(time(NULL));
	//找一个七位数的随机数
	//rand()生成的最大整数是32767,两个rand()相乘得更大的随机数
	long a = (rand()*rand())% 9000000 + 1000000;
	printf("输入你的彩票号码");
	scanf("%ld", &b);
	int total = numof(a, b);
	printf("开奖号码为%ld,你的号码为%ld,中了%d位数", a, b, total);

	return 0;
}

unsigned numof(long a, long b)
{
	int aaa[7];
	int bbb[7];//就两个数组看起来很愚蠢
	int* aArr = split(a,aaa);
	int* bArr = split(b,bbb);
	int total = 0;
	for (int i = 0; i < 7; i++)
	{
		if (*(aArr+i) == *(bArr+i))
			total++;
	}
	return total;
}

int* split(long num,int* ab)
{

	for (int i = 0; i < 7; i++)
	{
		ab[6-i] = num % 10;
		num = num / 10;
	}
	return ab;
}

又写了个Java的版本。感觉考虑的东西会少很多

import java.util.Random;
import java.util.Scanner;

public class Lottery {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long guessNum = in.nextLong();
        Random r = new Random();
        long number = r.nextInt(9000000) + 1000000;
        int total = numof(number,guessNum);
        System.out.printf("开奖号码是%d\n",number);
        System.out.printf("中了%d位",total);
    }


    public static int numof(long a, long b)
    {

        int[] aArr = split(a);
        int[] bArr = split(b);
        int total = 0;
        for (int i = 0; i < 7; i++)
        {
            if (aArr[i] == bArr[i])
                total++;
        }
        return total;
    }

    public static int[] split(long num)
    {
        int[] res = new int[7];

        for (int i = 0; i < 7; i++)
        {
            res[6-i] = (int) (num % 10);
            num = num / 10;
        }
        return res;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值