㈠ 一個c語言的貪吃蛇代碼,怎麼在代碼上添加上兩個固定位置的障礙物蛇撞上就死,而且食物不能在障礙物上。
#define N 200
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戲速度自己調整*/
struct Food
{
int x;/*食物的橫坐標*/
int y;/*食物的縱坐標*/
int yes;/*判斷是否要出現食物的變數*/
}food;/*食物的結構體*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的節數*/
int direction;/*蛇移動方向*/
int life;/* 蛇的生命,0活著,1死亡*/
}snake;
void Init(void);/*圖形驅動*/
void Close(void);/*圖形結束*/
void DrawK(void);/*開始畫面*/
void GameOver(void);/*結束游戲*/
void GamePlay(void);/*玩游戲具體過程*/ 怎麼全是void
void PrScore(void);/*輸出成績*/
/*主函數*/
void main(void)
{
Init();/*圖形驅動*/
DrawK();/*開始畫孝猜面*/
GamePlay();/*玩游戲具體過程*/
Close();/*圖形結束*/
}
/*圖形驅動*/
void Init(void)
{
int gd=DETECT,gm; ;/*定義圖形的驅動器變數和模式變數,驅動變數為自動檢測*/
initgraph(&gd,&gm,"c:\\tc"); /*此處為turboc的路徑*/
cleardevice(); /*清除屏幕*/
}
/*開始畫面,左上角坐標為巧升型(50,40),右下角坐標為(610,460)的圍牆*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設置線型*/
for(i=50;i<=600;i+=10)/*畫圍牆*/
{
rectangle(i,40,i+10,49); /*上邊*/
rectangle(i,451,i+10,460);/*下邊*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /笑薯*左邊*/
rectangle(601,i,610,i+10);/*右邊*/
}
}
/*玩游戲具體過程*/
void GamePlay(void)
{
randomize();/*隨機數發生器*/
food.yes=1;/*1表示需要出現新食物,0表示已經存在食物*/
snake.life=0;/*活著*/
snake.direction=1;/*方嚮往右*/
snake.x[0]=100;snake.y[0]=100;/*蛇頭*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*節數*/
PrScore();/*輸出得分*/
while(1)/*可以重復玩游戲,壓ESC鍵結束*/
{
while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/
{
if(food.yes==1)/*需要出現新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物隨機出現後必須讓食物能夠在整格內,這樣才可以讓蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*畫面上有食物了*/
}
if(food.yes==0)/*畫面上有食物了就要顯示*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--)/*蛇的每個環節往前移動,也就是貪吃蛇的關鍵演算法*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/
switch(snake.direction)
{
case 1:snake.x[0]+=10;break;
case 2: snake.x[0]-=10;break;
case 3: snake.y[0]-=10;break;
case 4: snake.y[0]+=10;break;
}
for(i=3;i<snake.node;i++)/*從蛇的第四節開始判斷是否撞到自己了,因為蛇頭為兩節,第三節不可能拐過來*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver();/*顯示失敗*/
snake.life=1;
break;
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
snake.y[0]>455)/*蛇是否撞到牆壁*/
{
GameOver();/*本次游戲結束*/
snake.life=1; /*蛇死*/
}
if(snake.life==1)/*以上兩種判斷以後,如果蛇死就跳出內循環,重新開始*/
break;
if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以後*/
{
setcolor(0);/*把畫面上的食物東西去掉*/
rectangle(food.x,food.y,food.x+10,food.y-10);
snake.x[snake.node]=-20;snake.y[snake.node]=-20;
/*新的一節先放在看不見的位置,下次循環就取前一節的位置*/
snake.node++;/*蛇的身體長一節*/
food.yes=1;/*畫面上需要出現新的食物*/
score+=10;
PrScore();/*輸出新得分*/
}
setcolor(4);/*畫出蛇*/
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最後一節*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循環*/
break;
key=bioskey(0);/*接收按鍵*/
if(key==ESC)/*按ESC鍵退出*/
break;
else
if(key==UP&&snake.direction!=4)
/*判斷是否往相反的方向移動*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2;
else
if(key==DOWN&&snake.direction!=3)
snake.direction=4;
}/*endwhile(1)*/
}
/*游戲結束*/
void GameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}
/*輸出成績*/
void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/*圖形結束*/
void Close(void)
{
getch();
closegraph();
}
㈡ 求解釋RFID的防碰撞演算法中的查詢樹QT演算法麻煩詳細說一下演算法原理,如何防碰撞的謝謝~
查詢樹QT(QueryTree)是一種典型的樹結構演算法,其演算法原理:讀寫器發送長度為k的prefix(前置代碼,一般為置於一組號碼前的數源宴拆字或字母,表示所屬區域等);標簽ID中前kbit與prefix匹配的tag反饋第(k+1)bit至最後1bit。如果讀寫器收到的標簽ID碰撞,再分別將prefix加「1」和「0」,作為新的prefix發送出去雹棗。如果沒有碰撞,就表明一個標簽被識別了。
舉例:設有三個標簽ID分別為「010」,「011」,「100」,讀寫器的查詢序列首先置為「0」、「1」,讀寫器先發送序列「0」進行查詢,發生碰撞,此時將序列置為「00」、「01」,再次分別發送,序列「00」沒有響應,序列「01」發生碰撞,將序列置祥棗為「010」、「011」,成功識別。回溯到序列「1」,只有標簽「100」響應,成功識別。如圖所示
㈢ 離散中wallshall演算法用C語言怎麼實現
我不知道你說的wallshall演算法是什麼 如果是求一態侍個無向圖中與一個已知頂點相連的所有頂點下面的代碼可以參考一下(用c++寫的):
#include<iostream>
using namespace std;
void main()
{
int edge[10][10];
memset(edge,0,sizeof(edge));
cout<<"輸入端點數帆敏:";
int n=0;
cin>態閉枝>n;
cout<<"輸入邊的端點:(輸入-1終止)"<<endl;
int x1,x2;
while(1)
{
cout<<"兩個端點號:"<<endl;
cin>>x1;
if(x1==-1)
break;
cin>>x2;
edge[x1-1][x2-1]=1;
edge[x2-1][x1-1]=1;
}
int singl[10];
memset(singl,0,sizeof(singl));
cout<<"輸入端點號:";
int point;
cin>>point;
point--;
for(int i=0;i<n;i++)
if(edge[point][i]==1)
singl[i]=1;
int mark=0;
int count=0;
while(1)
{
mark=1;
for(i=0;i<n;i++)
if(singl[i]==1)
for(int j=0;j<n;j++)
{
if(edge[i][j]==1)
singl[j]=1;
mark=0;
}
count++;
if((mark)||(i==n))
break;
}
for(i=0;i<n;i++)
if(singl[i]==1)
cout<<i+1<<" ";
cout<<endl;
}
輸入端點數:4
輸入邊的端點:(輸入-1終止)
兩個端點號:
1
2
兩個端點號:
2
3
兩個端點號:
3
4
兩個端點號:
-1
輸入端點號:1
1 2 3 4
Press any key to continue
㈣ 求此題的C語言代碼
#include <歲敬碼stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int nNu, nMult = 1;
int i, j;
int max = 0;
int anArr[10] = {0};
if (argc == 1)
{
printf("Usag:\n\t<app> <Nu1>稿缺 <Nu2> ... <Nux>\n");
return 0;
}
for (i = 1; i < argc; ++i)
{
nNu = atoi(argv[i]);
if (nNu == 0)
{
printf("Invalid digital %s\n", argv[i]);
return 0;
}
anArr[i-1] = nNu;
nMult *= nNu;
if (max < nNu)
max = nNu;
}
for (i = nNu; i <= nMult; ++i)
{
for (j = 0; j < argc-1; ++j)
{
if (i%anArr[j]!=0)
break;
}
if (j == argc-1)
{
printf("乎哪%4d\n", i);
break;
}
}
return 0;
}
㈤ 最常用的防碰撞演算法
最常用的防碰撞演算法時分多址法。根據查詢相關扮褲公開信息顯示,時分多址是一種為實現共享傳輸介質廳悶簡(一般是無線電領域)或者網路的通信技術。在一罩物個寬頻的無線載波上,把時間分成周期性的幀,每一幀再分割成若干時隙(無論幀或時隙都是互不重疊的),每個時隙就是一個通信信道,分配給一個用戶。
㈥ C語言演算法問題,求解大佬解決,給出代碼
#include "stdafx.h"
#include <stdio.h>
//定義矩陣大小
#define ROWCNT 3 //行
#define COLCNT 4 //列
typedef struct{
int row; //行,-1表表示未定義,0表示第一行
int col; //列,-1表表示未定義,0表示第一列
int val; //值
} Elem;
extern Elem A[ROWCNT*COLCNT];
extern Elem B[ROWCNT*COLCNT];
extern Elem Sum[ROWCNT*COLCNT];
void input(Elem *Data){
int row,col,val;
int cnt=0;
//先對數組初始化
for(cnt=0;cnt<ROWCNT*COLCNT;cnt++){
Data[cnt].row=-1;
Data[cnt].col=-1;
Data[cnt].val=0;
}
cnt=0;
do{
scanf("%d %d %d",&row,&col,&val);
if (row>=0){
Data->row=row;
Data->col=col;
Data->val=val;
Data++;//指針後移到下一個元素
cnt++;
}
}while((row>=0)&&(cnt<ROWCNT*COLCNT));
}
int Find(Elem *Data,int row,int col){
int result=0;
while(Data->row>=0){
if ((Data->row==row)&&(Data->col==col)){
result=Data->val;
break;
}
Data++;
}
return(result);
}
void ShowMatrix(Elem *A){
int i,j;
for(i=0;i<ROWCNT;i++){
for(j=0;j<COLCNT;j++){
printf("%d ",Find(A,i,j));
}
printf("\n");
}
}
void AddMatric(Elem *DataA,Elem *DataB,Elem *DataSum){
int i,j,k;
for(i=0;i<ROWCNT;i++){
for(j=0;j<COLCNT;j++){
k=Find(DataA,i,j)+Find(DataB,i,j);
if(k!=0){
DataSum->row=i;
DataSum->col=j;
DataSum->val=k;
DataSum++;
}
}
}
}
int main(int argc, char* argv[]){
printf("Input Matrix A \n");
printf("Format: Row Col Value\n");
printf("when Row=-1 to end\n");
input(A);
printf("---Matrix A is ----\n");
ShowMatrix(A);
printf("\nInput Matrix B \n");
printf("Format: Row Col Value\n");
printf("when Row=-1 to end\n");
input(B);
printf("---Matrix B is ----\n");
ShowMatrix(B);
AddMatric(A,B,Sum);
printf("---Matrix Sum is ----\n");
ShowMatrix(Sum);
scanf("%d",&i);//等待輸入一個數字,方便在調試時觀察結果,否則會運行完成直接退出,不容易看到輸出
return 0;
}
㈦ c語言銀行家演算法安全性判別
把1作為參數傳給yanzheng() yanzheng(int m)
然後驗證函數里修改:
work=Avaliable;
i=m;
while(i<m)
{
if(Finish[i]==false&&Need[i]<=work)
{
work=work+Allocation[i];
Finish[i]=true;
anquan[k]=i;
k++;
i=0;
}
else
i++;
}
㈧ 誰可以給我解釋一段C語言代碼(詳細點) 謝謝
知道MM 7081=73*97,KK 1789,不用多久就能知道PP85了。
RSA要用大素數,這么小的素數手算都能破了你的。
/*RSA algorithm */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MM 7081
#define KK 1789
#define PHIM 6912
#define PP 85
typedef char strtype[10000];
int len;
long nume[10000];
int change[126];
char antichange[37];
void initialize()
{ int i;
char c;
/*生成字元到數字,和,數字到字元的兩張編碼表*/
for (i = 11, c = 'A'; c <= 'Z'; c ++, i ++)
{ change[c] = i;
antichange[i] = c;
}
}
/*將字元串轉成笑慧數字串*/
void changetonum(strtype str)
{ int l = strlen(str), i;
len = 0;
memset(nume, 0, sizeof(nume));
for (i = 0; i < l; i ++)
{ nume[len] = nume[len] * 100 + change[str[i]];
if (i % 2 == 1) len ++; /*每兩個字元存在一個int型數中*/
}
if (i % 2 != 0) len ++;
}
/*求(數numb的k次方)mod MM,為了防止溢出,所以每次求次方都進行了模運算*/
/*即去掉函數中的 [% MM] ,剩下的代碼就是求數numb的k次方*/
long binamod(long numb, long k)
{ if (k == 0) return 1;
long curr = binamod (numb, k / 2);
if (k % 2 == 0)
return curr * curr % MM;
else return (curr * curr) % MM * numb % MM;
}
/*求(數numb的KK次方)mod MM*/
long encode(long numb)
{ return binamod(numb, KK);
}
/*求(鋒好數numb的PP次方)mod MM*/
long decode(long numb)
{ return binamod(numb, PP);
}
main()
{ strtype str;
int i, a1, a2;
long curr;
initialize();
puts("Input 'Y' if encoding, otherwise input 'N':");
gets(str);
if (str[0] == 'Y')
{ gets(str);/*獲得字元串*/銀升鉛
changetonum(str); /*字元串轉成數字串*/
printf("encoded: ");
for (i = 0; i < len; i ++)
{ if (i) putchar('-');
printf(" %ld ", encode(nume[i]));/*對每個數字加密*/
}
putchar('\n');
}
else
{ scanf("%d", &len);
for (i = 0; i < len; i ++)
{ scanf("%ld", &curr);
curr = decode(curr);/*對每個數字解密*/
a1 = curr / 100; /*數字轉成字元*/
a2 = curr % 100;
printf("decoded: ");
if (a1 != 0) putchar(antichange[a1]);
if (a2 != 0) putchar(antichange[a2]);
}
putchar('\n');
}
putchar('\n');
system("PAUSE");
return 0;
}
㈨ RFID的防碰撞代碼
演算法的實鄭棚逗現和用什麼語言沒有關系。匯喊賣編,C語言都可以,只要處理器支持。射頻識別即RFID(Radio Frequency IDentification)技術,又稱電子標簽、無線射頻識別,是一種通和備信技術,可通過無線電訊號識別特定目標並讀寫相關數據。
㈩ 演算法編程:用c語言實現
解決這類問題可以使用 回溯 演算法,代碼如下:
#include<stdio.h>
#include<stdlib.h>
#defineM6//候選數字個數
#defineN5//組合後數字位數
intcheck(intresult[],inti)
{
for(intj=0;j<N;j++)
if(result[j]==i)
return0;
return1;
}
intlist(intnumbers[],intl,intresult[],intcount)
{
if(l>=N){
//將各位數組合成一個數
intnum=0;
for(inti=0;i<N;i++){
num=num*10+numbers[result[i]];
}
//判斷這個數是否能被75整除
if(num%75==0){
printf("%d ",num);
count++;
}
returncount;
}
for(inti=0;i<M;i++){
if(!check(result,i)){
continue;
}
result[l]=i;
count=list(numbers,l+1,result,count);
result[l]=-1;
}
returncount;
}
intmain()
{
intnumbers[M]={1,2,5,7,8,9};
intresult[N]={-1,-1,-1,-1,-1};
intcount=list(numbers,0,result,0);
printf("共有%d個 ",count);
system("pause");
return0;
}
運行結果: