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