編程猜中位數
㈠ 求解編程題目<猜數字>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 ]
變年級不等於