编程猜中位数
㈠ 求解编程题目<猜数字>C++/C
我觉得解决这个问题有几点要注意:实现方面:生成随机数、防止待猜测的数中重复数字
异常方面:处理输入不为四位的情况。
我练习输入输出、类型转换的时候做过一个类似功能的,但是有些地方不完善。
guess0.cpp
// Guess0.cpp : Defines the entry point for the console application.
//
//最后一次正确时,运行不正确
//猜数字
//产生的随机数每次都是1740,而给result赋值时每次都是1242。
//前者原因:rand的问题,该方法需要与srand一起使用;后者是类型转化过程出错
//可以考虑加上时间,按照时间长短给予不同提示。
#include "StdAfx.h"
#include "head.h"
#include <string.h>
#include <stdlib.h>
#include <afx.h>
#define ARRAY_SIZE 4 //宏,定义要猜的数字位数,默认为4,可以修改
#define CHANCE 10 //可以猜测的次数
char result[ARRAY_SIZE+1]={0};//要猜的数字数组;多定义一位,用于存储结束符
int counter = 0;//记录次数,不得大于CHANCE
int main(int argc, char* argv[])
{
char ans;
do{
process();
printf("是否继续?(是,输入“y”;否输入“n”)");
scanf("%c",&ans);
fflush(stdin);
}while(ans=='y'||ans=='Y');
return 0;
}
void myRand()//生成一个4位数字
{//应该在初始化中首次调用此方法
//把值传给result时容易出错,注意选择方式
//先 生成随机数,截取其各位数字,当有重复时重新生成。
memset(result,0,ARRAY_SIZE);
result[ARRAY_SIZE] = 0;
int i,j;
int nums[ARRAY_SIZE];//中间数组
memset(nums,0,ARRAY_SIZE);
char temp[ARRAY_SIZE][1];//注意!temp[]以及它以后的存储区域都是连续的,不能用temp首地址输出。
for(i=0;i<ARRAY_SIZE;i++)
{
memset(temp[i],'\0',1);
}
srand((unsigned)time(NULL));//使从当前时刻开始生成的随机数不存在重复
//若无此语句,程序每次执行,产生的随机数是按照顺序来的,依次为1740,9482。。。
for (i=0;i<ARRAY_SIZE;i++)
{
nums[i] = rand();
nums[i] = nums[i]%10;
for (j=0;j<i;j++) //消除重复数字
{ //新生成的数字要和前面所有数字比较
while(nums[i]==nums[j]) //遇到重复数字时,重新生成;
{ //此处不可用if,因为重新生成的数字也需要比较一次
nums[i] = rand();
nums[i] = nums[i]%10;
j=0; //一旦重新生成就重新开始比较,计数置0
}
}
sprintf(temp[i],"%d",nums[i]);
result[i] = temp[i][0];//把处理好的数字赋给result
}
result[ARRAY_SIZE] = '0'; //结束符
}
void process()//将获得的数字与已生成数字比较
{
//在菜单中说明
printf("欢迎进入本游戏。\n");
printf("程序将随机生成一个不含重复数字的四位数,然后请您猜测这个四位数。\n");
printf("在猜测的过程中我讲给您适当提示,其中\n");
printf("A代表结果中有且位置正确的数字,B代表结果中有但位置不正确的数字。\n");
printf("在一次游戏结束后,您可以查看结果或者重新开始。\n");
/*
CString inpt;//下面的GetAt调用出现问题,给inpt赋值可以解决
//但是赋值比如为0的话,又会提示长度不对;赋值为0000的话会提示重复数字
//明明在读入的时候,初始赋值已经改变了。
//调试发现虽然inpt已经获得了输入,但是其长度却未改变,应该是接受输入的过程出错
//根本原因在于用scanf读入CString对象的值。虽然能读入,但那只是一个临时值,随时
//会发生“不可预知”的错误。
//所以,改用字符数组或者字符指针实现这一问题
*/
/* //使用字符指针
char *inpt;//缓存输入
inpt = (char *)malloc(ARRAY_SIZE+1);
……
free(inpt);
*/
char inpt[]={0,0,0,'-',0};
char ans=NULL;
do
{
myRand();
printf("请输入一个不含重复数字的%d位数(多于四位将只处理前四位):\n", ARRAY_SIZE);
int count1 = 0, //结果中含该数字、位置正确,即A的值
count2 = 0;//结果中含该数字、位置不正确,即B的值
while(counter<CHANCE)
{
scanf("%s",inpt);
fflush(stdin);
while (judge_length(inpt)||judge_repeat(inpt))
{
printf("请重新输入:\n");
scanf("%s",inpt);
fflush(stdin);
}
int i,j;
count1 = 0;
count2 = 0;
for (i=0;i<ARRAY_SIZE;i++)
{
for (j=0;j<ARRAY_SIZE;j++)
{
if (inpt[j]==result[i])
{
if (i!=j)
count2++;
else
count1++;
}
}
}
if (count1==ARRAY_SIZE)
{
printf("恭喜您,猜对了!\n");
break;
}
else
{
printf("%s %d%c%d%c\n",inpt, count1, 'A', count2, 'B');
}
counter++;
}
if (counter==CHANCE)
{
printf("对不起,您已经用完了10次机会!您可以查看结果或者重新开始。");
printf("您可以输入0来查看正确结果。\n");
char choice;
scanf("%c",&choice);
if (choice=='0')
{
printf("正确结果是%s\n",result);
}
}
counter=0;
printf("继续?(y/n)\n");
scanf("%c",&ans);
fflush(stdin);
} while (ans=='y'||ans=='Y');
}
bool judge_repeat(char inpt[])//判断有无重复数字
{
int i,j;
for(i=0;i<ARRAY_SIZE;i++)
{
for (j=0;j<i;j++)
{
if (inpt[i]==inpt[j])
{
printf("您的输入含有重复数字。\n");
return true;
}
}
}
return false;
}
bool judge_length(char inpt[])//判断输入数字的位数
{
if (inpt[ARRAY_SIZE-1]=='-')//如果C/C++数组名可以调用类似length的
{ //函数,那样实现比较理想
//在声明inpt多加一位,加上条件inpt[ARRAY_SIZE]!=(指定字符),应该可以处理超出的输入
printf("您的输入长度不对。\n");
printf("inpt[ARRAY_SIZE-1] = %c\n",inpt[ARRAY_SIZE-1]);
printf("inpt[ARRAY_SIZE] = %c",inpt[ARRAY_SIZE]);
return true;
}
return false;
}
guess0.h
#include "StdAfx.h"
#include <afx.h>
void process();
bool judge_repeat(char inp[]);
bool judge_length(char inp[]);
㈡ 100亿个无序有重复的64位整数,如何找到其中位数
借助数据库,直接取max()和min(),求平均数;
或者用轮询,设定amax,amin,测试每一个数,如果比amax大,就让amax等于它;如果比amin小,就让amin等于它,循环一遍,也是要点时间的
中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。
㈢ 如何用excel求中位数的方法
在 Excel 录入好数据之后,多数情况下都需要进行计算统计,而求中位数也是一个比较常用的函数,下面是我带来的关于如何用excel求中位数的 方法 ,欢迎阅读!
如何用excel求中位数的方法:
如图所示是演示数据
步骤1:在对应单元格中输入公式:
=MEDIAN(B3:B28)
从图1中我们可以看到我们的演示数据全部都是整数,为什么是统计中位时出现了小数呢?
是不是统计错误了呢?
步骤2:我们慢慢分析看,当我们的所要统计的数据有奇数个时,如1.2.3,这时我们看到中位数就是2。当有偶数个时,如1.2.3.4,我们说哪一个是中间的那个数呢,在Excel中为将2.3中间的那个数,2.5作为中位数来处理。因此我们看到的结果就有了小数。
步骤3:到底是不是上面分析的原因呢,我们将公式中的数据个数改一下,来验证一下,如图:
步骤4:我们看到如图所示结果,这就证明我们的猜想是正确的。
㈣ 计算机编程 123求中位数
求位数最简单的方法是把这个数字转换成字符串类型 然后用字符串类型的函数测量长度
var k:Int = 123;
var s:String = String(k);
trace(s.length);//输出3
如果求每位数的话可以用取余的方法
先判断位数 可用if(数字>99){} if(数字>9){}……来判断
是否>99
如果大于的话 可用数字%100取得百位上的数字
可用数字%100/10取得十位上的数字
可用数字%10取得个位上数字
是否>9
如果大于可用数字%100/10取得十位上的数字
可用数字%10取得个位上数字
否则 就是个位了
㈤ c语言编程 猜数游戏
#include
#include
//用到了rand函数,所以要有这个头文件
#include
//用到了time函数,所以要有这个头文件
int
main()
{
int
number;
//number用于存储随机数
int
guess=0;
//guess用于存储玩家猜的数
srand((unsigned)
time(null));//用系统时间作为rand函数使用的种子
number=rand()%100;
//随机除以100,取余数
number++;
//余数加1
printf("猜数字游戏\n");
printf("该数字在1到100之间\n");
while(guess!=number)
{
printf("请输入您所猜的数:");
scanf("%d",&guess);
//如果玩家猜的数较小,给予提示
if
(guess
number)
{
printf("大了\n");
}
}
//猜中则循环结束,输出猜中的数字
printf("猜对了,这个数字就是:%d\n",number);
return
0;
}
㈥ c++统计问题编程
用C++的话可以通过如下的方式巧妙简单的实现,借助于容器和泛型算法,你会发现是如此如此的简单!!!
const size_t array_size=8;
double array[array_size]={2.123,3.122,5.231,4.00,8.111,8.111,12.222,0.233};
vector<double> d_vec(array,array+array_size);
map<double,int> zs_count;
double most_number=0.0;
int most_count=0;
sort(d_vec.begin(),d_vec.end());
double sum=accumulate(d_vec.begin(),d_vec.end(),0.0);
double average=sum/d_vec.size();
vector<double>::iterator mid_iter;
if (d_vec.size()%2==0)
{
mid_iter=d_vec.begin()+d_vec.size()/2-1;
}
else
mid_iter=d_vec.begin()+d_vec.size();
for (vector<double>::iterator d_iter=d_vec.begin();d_iter!=d_vec.end();++d_iter)
{
++zs_count[*d_iter];
}
map<double,int>::const_iterator map_it =zs_count.begin();
while(map_it!=zs_count.end())
{
if (map_it->second>most_count)
{
most_number=map_it->first;
most_count=map_it->second;
++map_it;
}
else
if (map_it->second==most_count)
{
most_count=0;
most_number=0.0;
++map_it;
}
else
++map_it;
}
cout << "最小的数是:" << *d_vec.begin() <<endl;
cout << "最大的数是:" << *(d_vec.end()-1) <<endl;
cout << "中位数是:" << *mid_iter <<endl;
cout << "平均数是:" << average <<endl;
cout << "众数是:" << most_number <<endl;
这个例子的运行结果如下:
方差是什么我忘了,不知道怎么算,所以这里没有列出来,你可以按上面的代码那样自己去算一下,如果看了上面的代码还不懂怎么求方差的话,可以告诉我什么是方差,我再把代码补上。
㈦ VB编程求5个数的中位数问题
老师与你们闹着玩?
用If语句嵌套,把你们的头弄晕为止!
你还是老老实实,排序,然后输出中间的一个数字C!
比如,从小到大排!
首先,更正你的Dim语句是错误的理解?
Dim a As Double, b As Double, c As Double, d As Double, e As Double
Dim T As Double '我再加一个变量,交换用
a = Val(InputBox("请输入第一只小鸡的体重(以kg为单位)"))
b = Val(InputBox("请输入第二只小鸡的体重(以kg为单位)"))
c = Val(InputBox("请输入第三只小鸡的体重(以kg为单位)"))
d = Val(InputBox("请输入第四只小鸡的体重(以kg为单位)"))
e = Val(InputBox("请输入第五只小鸡的体重(以kg为单位)"))
'开始排序
If a > b Then
T = a:a = b:b = T '中间是冒号,不太看得清!!!
End If
If a > c Then
T = a:a = c:c = T '中间是冒号,不太看得清!!!
End If
If a > d Then
T = a:a = d:d = T '中间是冒号,不太看得清!!!
End If
If a > e Then
T = a:a = e:e = T '中间是冒号,不太看得清!!!
End If
'经过以上四个IF,a里是最小的了
If b > c Then
T = b:b = c:c = T '中间是冒号,不太看得清!!!
End If
If b > d Then
T = b:b = d:d = T '中间是冒号,不太看得清!!!
End If
If b > e Then
T = b:b = e:e = T '中间是冒号,不太看得清!!!
End If
'经过以上三个IF,b里是第2小的了
If c > d Then
T = c:c = d:d = T '中间是冒号,不太看得清!!!
End If
If c > e Then
T = c:c = e:e = T '中间是冒号,不太看得清!!!
End If
'经过以上两个IF,c里是第3小的了----也就是中间那个数了
Print c
㈧ c++编程求数组各元素的中位数
#include<iostream>
using namespace std;
void array_input(double array[], int n)
{
for(int i=0;i<n;i++)
cin>>array[i];
}
void select_sort(double array[], int n)
{
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(array[j]<array[i])
{
double t;
t=array[i];
array[i]=array[j];
array[j]=t;
}
}
}
}
double median(double array[], int n)
{
double medium;
if(n%2==1)
medium=array[n/2];
else
medium=(array[n/2-1]+array[n/2])/2;
return medium;
}
int main()
{
double arr[8];
array_input(arr,8);
select_sort(arr,8);
cout<<median(arr,8)<<endl;
return 0;
}
㈨ c语言求编程:中位数
你描述的要求不是很明了,应该分步描述,每一步的要求分步写出来,大家容易看懂.
明白你的意思了!
只有两个口控制步进电机的话,需要外加步进电机驱动器.
p1.0控制方向,p1.0是1(0)电机向前,p1.0是0(1)步进电机向后
p1.1控制步数和速度,用一个PWM就可以了,直接用定时器来控制.pwm频率越高速度越快,但要用在定时器中断里面计算步进的步数来确定走了多远.
至于你说的中断信号,可以用循环扫描的方法,在程序中扫描输入中断信号,当检测到信号后改变P1.5的电平,即可点亮LED
㈩ java编程问题
用下面的API创建一个“等级”类
构造函数
分数
int学生计数,int MINI等级,int Max等级)
这将创建一系列学生成绩。每个年级将是一个随机数从最小年级到最大年级,包括。
方法
1)toSTRIN()
打印这种格式的等级:
等级:[ 78, 58, 76,101, 59, 55,84, 91, 84,67 ]
2)用于分级的存取器和多路选择器
3)等值法
4)克隆方法
5)按升序排序等级的方法
6)按降序排列等级的方法
7)返回最高等级的方法
8)将平均成绩返回到小数点的方法。
9)返回中位数的方法。
10)返回模式的方法 。
11)返回一个数组,其中包含F的D的C的B和A的数目
〔7, 2, 1,0, 0〕
12)返回包含每个学生的字母等级的数组的方法
[f,f,d,f,f,c,f,f,d,f]
13)等级到一位小数的标准差
一、
有多少学生?
十
最小年级:
零
最大等级:
一百
等级:[ 59, 1, 70,1, 30, 7,48, 100, 45,83 ]
排序等级:[ 1, 1, 7,30, 45, 48,59, 70, 83,100 ]
反向等级:[ 100, 83, 70,59, 48, 45,30, 7, 1,1 ]
最高等级为:100。
平均成绩:44.4分
中位数:46
模式〔1〕
字母等级:[ 7, 0, 1,1, 1 ]
[f,f,c,f,f,f,f,a,f,b]
SD:32.9
克隆等级相等
品位变化:
一
新年级:
一百
等级:[ 59, 100, 70,1, 30, 7,48, 100, 45,83 ]
变年级不等于
有多少学生?
磷
有多少学生?
- 1
有多少学生?
零
有多少学生?
十一
最小年级:
一百零五
最大等级:
五十
等级:[ 56, 59, 92,94, 80, 55,103, 101, 78,51, 69 ]
排序等级:[ 51, 55, 56,59, 69, 78,80, 92, 94,101, 103 ]
反向等级:[ 103, 101, 94,92, 80, 78,69, 59, 56,55, 51 ]
最高等级为:103。
平均成绩:76.2分
中位数:78
模式〔51, 55, 56、59, 69, 78、80, 92, 94、101, 103〕
字母等级:[ 4, 1, 1,1, 4 ]
[f,f,a,b,f,a,a,c,f,d]
SD:18.5
克隆等级相等
品位变化:
九
新年级:
一百
等级:[ 56, 59, 92,94, 80, 55,103, 101, 78,100, 69 ]
变年级不等于