c趣味編程
⑴ 教你如何使用c語言編寫簡單小游戲
編寫程序,實現如下表所示的5-魔方陣。
17
24
1
8
15
23
5
7
14
16
4
6
13
20
22
10
12
19
21
3
11
18
25
2
9
5-魔方陣
問題分析
所謂「n-魔方陣」,指的是使用1〜n2共n2個自然數排列成一個n×n的方陣,其中n為奇數;該方陣的每行、每列及對角線元素之和都相等,並為一個只與n有關的常數,該常數為n×(n2+1)/2。
例如5-魔方陣,其第一行、第一列及主對角線上各元素之和如下:
第一行元素之和:17+24+1+8+15=65
第一列元素之和:17+23+4+10+11=65
主對角線上元素之和:17+5+13+21+9=65
而
n×(n2+1)/2=5×(52+1)/2=65
可以驗證,5-魔方陣中其餘各行、各列及副對角線上的元素之和也都為65。
假定陣列的行列下標都從0開始,則魔方陣的生成方法為:在第0行中間置1,對從2開始的其餘n2-1個數依次按下列規則存放:
(1)
假定當前數的下標為(i,j),則下一個數的放置位置為當前位置的右上方,即下標為(i-1,j+1)的位置。
(2)
如果當前數在第0行,即i-1小於0,則將下一個數放在最後一行的下一列上,即下標為(n-1,j+1)的位置。
(3)
如果當前數在最後一列上,即j+1大於n-1,則將下一個數放在上一行的第一列上,即下標為(i-1,0)的位置。
(4)
如果當前數是n的倍數,則將下一個數直接放在當前位置的正下方,即下標為(i+1,j)的位置。
演算法設計
在設計演算法時釆用了下面一些方法:
定義array()函數,array()函數的根據輸入的n值,生成並顯示一個魔方陣,當發現n不是奇數時,就加1使之成為奇數。
使用動態內存分配與釋放函數malloc()與free(),在程序執行過程中動態分配與釋放內存,這樣做的好處是使代碼具有通用性,同時提高內存的使用率。
在分配內存時還要注意,由於一個整型數要佔用兩個內存,因此,如果魔方陣中要存放的數有max個,則分配內存時要分配2*max個單元,從而有malloc(max+max)。在malloc()函數中使用max+max而不是2*max是考慮了程序運行的性能。
顯然應該使用二維數組來表示魔方陣,但雖然數組是二維形式的,而由於內存是一維線性的,因此在存取數組元素時,要將雙下標轉換為單個索引編號。在程序中直接定義了指針變數來指向數組空間,即使用malloc()函數分配的內存。
⑵ C語言趣味編程高分求救,進來幫幫我啊
http://..com/question/94074300.html
⑶ c/c++/c#趣味編程題
不太明白 占樓學習之~
我的想法:5層循環 最內層用離散把這幾個條件都化簡了...或者不化簡應該也可以 符合條件的輸出...
⑷ 趣味編程學什麼
小學生學習培訓編程自身具備局限,專業知識方面的限定,讓孩子思索范疇比較有限。但這並不是危害孩子學習培訓編程,由於中小學趣味編程關鍵以塑造孩子編程興趣愛好為本,不用孩子有著豐富多彩的英文詞彙量及計算機技能。學少兒編程可以提高孩子邏輯思維、專注力
中小學趣味編程關鍵以趣味性主導,以編程手機游戲為例,吸引住孩子集中注意力。比如,去年杭州市某院校就將Scratch趣味編程搬進課堂教學,孩子在課堂教學上開展憤怒小鳥游戲製作。一開始的情況下,孩子覺得既奇特又疑惑,伴隨著時間的變化與老師的教育,孩子迅速尋找實際操作的規律性。表層上孩子滯留在姿勢和外型上,對編程命令都是模模糊糊,可是根據教師一節課的正確引導及協助,絕大多數孩子都掌握製作游戲的方式,明白編程專用工具的操作步驟。
想讓孩子學編程,可以了解一下童程童美。童程童美依託集團公司19年編程教學經驗,專注3-18 歲少兒編程教育及效勞,構成為一體的少兒教育平台。強調綜合才能的培育和實踐解決問題才能的提升,在興味激起和思想錘煉的才能。2018年,童程童美推出「童程在線」學習平台,打造線上線下一體化的OMO教育模式,為學員提供更豐富的學習場景和更沉浸的學習體驗。目前,童程童美在讀學員數超過13萬名。。目前童程童美有少兒編程體驗課,點擊可免費報名試聽
⑸ c語言趣味編程100例 怎麼樣
還算不錯。。。
⑹ C/C++編程趣味題
#include<iostream.h>
void main()
{
int d[8]={0},b[9]={1,2,3,4,5,6,7,8,9};
long A[9],B[8];
int i,j,k,lenb,lend;
for(d[0]=0; d[0]<3; d[0]++)//1 2間的運算符
for(d[1]=0; d[1]<3; d[1]++)//2 3間的運算符
for(d[2]=0; d[2]<3; d[2]++)//3 4間的運算符
for(d[3]=0; d[3]<3; d[3]++)//4 5間的運算符
for(d[4]=0; d[4]<3; d[4]++)//5 6間的運算符
for(d[5]=0; d[5]<3; d[5]++)//6 7間的運算符
for(d[6]=0; d[6]<3; d[6]++)//7 8間的運算符
for(d[7]=0; d[7]<3; d[7]++)//8 9間的運算符
{
j=0,k=0, A[0]=b[0];
for(i=0;i<8;i++){
if(d[i]!=0){
j++;
A[j]=b[i+1];
}
if(d[i]==0)
A[j]=10*A[j]+b[i+1];//A存放數據
else if(d[i]==1)
B[k++]=1; //B存放運算符
else
B[k++]=2;
}
lenb=j;
lend=k;
char c[8];long sum=A[0];
for(i=0;i<lend;i++){
if(B[i]==1){
sum=sum+A[i+1];
c[i]='+';
}
else if(B[i]==2){
sum=sum-A[i+1];
c[i]='-';
}
}
if(sum==100){
for(j=0;j<lend;j++)
cout<<A[j]<<c[j];
cout<<A[j]<<'='<<sum<<endl;
}
}
}
正如樓主所說,生成運算符的數組是非常麻煩的,希望有人能夠解決.
由運算符生成數據的演算法我自認為還可以,有什麼問題希望能夠討論!
不好意思,未加註釋,讀起來可能會痛苦
絕對支持此類問題
注:借鑒一樓
我們的演算法大都一樣,用1代表+,用2代表-,沒有運算符就用0來替代
所以就可以把所有可能的運算符數組用 (如果有n種運算可視為n+1進制的數) 3進制的整數替代,工有3^8種組合;
即可以把for 循環中的d[8]改為
d[8]={0}; //初始化全為0
for(int i=0;i<3^8;i++){ //3的8次方用函數可求
int n=8;
do
d[--n]=i%3;
while(i=i/3);
}
雖然在演算法的復雜度上沒什麼提高,但書寫起來就要方便很多
⑺ C\C++ 趣味編程題目
include <iostream>
using namespace std;
void main(){
int pirate[30];
int i,j,survived;
for(i=0;i<30;i++)
pirate[i]=0;
i=0;j=0;
for(survived=30;survived>1;){
if(pirate[i]==0){
j++;
if(j%7==0){
pirate[i]=1;
cout<<"No."<<i+1<<" private jump"<<endl;
survived-=1;
}
}
i=(i+1)%30;
}
for(i=0;i<30;i++)
if(pirate[i]==0)
cout<<"No."<<i+1<<" private survive"<<endl;
}
這個程序得到的答案是23號海盜生存,不知是否符合樓主的要求,呵呵
⑻ 趣味C語言小編程
題眼就是求出2~10的最小公倍數,然後減一。
模擬排隊的演算法是可行的,但不是最優的。
#include <stdio.h>
int od(int x,int n) //x是否能被n整除,是返回1,否返回0
{
if (x%n) return 0;
return 1;
}
int gbs(int a[],int n) //求a[n]內所有元素的最小公倍數
{
int i,j,k,o,m=0;
int b[20],c[100];
for (i=0;i<n;i++)
{
if(m<a[i]) m=a[i];
b[i]=a[i];
}
j=2; o=0;
while (j<=m)
{
k=0;
for (i=0;i<n;i++){
if (od(b[i],j)) k++;
if (k>1) break;
}
if(k>1)
{
c[o++]=j;
for (i=0;i<n;i++)
if (od(b[i],j)) b[i]=b[i]/j;
m=0;
for (i=0;i<n;i++)
if(m<b[i]) m=b[i];
}
else
j++;
}
k=1;
for(i=0;i<o;i++)
{
k*=c[i];
}
for (i=0;i<n;i++)
{
k*=b[i];
}
return k;
}
main()
{
int a[10];
for(int i=1;i<=10;i++)
a[i-1]=i;
printf("count=%d\n",gbs(a,10)-1);
getchar();
return 0;
}
⑼ c語言趣味編程:話說有一隻狗熊到玉米地里掰玉米,一邊掰,一邊吃,第一天吃了一半,又拿走一個回去喂小狗
#include<stdio.h>
void main()
{
int day, x1, x2;
printf("狗熊到玉米地吃了包穀");
printf("第一天吃了一半又拿走一個回去喂小狗熊。\n");
printf("第二天又去吃了剩下的一半,走是任然帶一個回去。/n");
printf("以後每天都吃前一天剩下的一半,拿走一個。/n");
printf("到了第十天時,地里只剩下一個包穀。求地里一共有多少包穀。/n");
day=10;
x2=1;
while (day>0)
{
x1=(x2+1)*2;
x2=x1;
day--;
}
printf("包穀總數=%d\n",x1);
}