當前位置:首頁 » 編程軟體 » 編程猜中位數

編程猜中位數

發布時間: 2022-09-19 04:49:43

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

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:618
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:345
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:60
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:287
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:780
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:332
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:195
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:784
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:348
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:576