㈠ 關於乘除法數字謎的matlab程序ABCDEF*B=EFABCD,怎麼寫啊,我編寫的實在算不對,不知哪裡出問題了!
076923*3=230769
可以用兩種方法:
1、筆算:把上式看成:ABCDEF*F=EFABCD,然後令F等於0、1、2、3.....9,然後通過上算式的關系依次推出直至結果出來!
2、編程序算:可以用turbo.c 2.0編寫c語言程序,用FOR循環做,這需要一定的編程能力。
結果如上,LZ可以驗證一下。
㈡ c語言字母與數字之間的 轉換很迷茫。
#include<stdio.h>
void main()
{
char t,f;
int i,n;
printf("f:\n");
scanf("%c",&f);
getchar(); //需要一個getchar()把'回車'去掉
int a=f;
printf("t:\n");
scanf("%c",&t);
int b=t;
if(a>b)
{
n=b;
b=a;
t=n;
}
for(i=a;i<=b;i++)
{
if(i>=97&&i<=122)
{
printf("%c ",i);
}
}
}
㈢ 猜字謎:SEND+MORE=MONEY,求S、E、N、D、M、O、R、Y。
參考答案:9567+1085=10652)*/ S=9、E=5、N=6、D=7、M=1、O=0、R=8、Y=2
/*n[1] = s;n[2] = e;n[3] = n;n[4] = d;n[5] = m;n[6] = o;n[7] = r;n[8] = y;*/
void main()
{
int n[9];
for(n[1] = 0; n[1] < 10; n[1]++)
for(n[2] = 0; n[2] < 10; n[2]++)
for(n[3] = 0; n[3] < 10; n[3]++)
for(n[4] = 0; n[4] < 10; n[4]++)
for(n[5] = 0; n[5] < 10; n[5]++)
for(n[6] = 0; n[6] < 10; n[6]++)
for(n[7] = 0; n[7] < 10; n[7]++)
for(n[8] = 0; n[8] < 10; n[8]++)
{
if(((n[1] + n[5])* 1000 + (n[2] + n[6]) * 100 + (n[3] + n[7]) * 10 + n[4] + n[2]) == (n[5] * 10000 + n[6] * 1000 + n[3] * 100 + n[2] * 10 + n[8]))
{
printf("s:%d\te:%d\tn:%d\td:%d\tm:%d\to:%d\tr:%d\ty:%d\t%d%d%d%d + %d%d%d%d = %d%d%d%d%d\n",n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8],n[1],n[2], n[3], n[4],n[5], n[6], n[7], n[2], n[5], n[6], n[3], n[2], n[8]);
}
}
getch();
}
㈣ 怎麼用C語言控制16*16的LED顯示漢字數字,漢字比如「歡迎光臨」,數字比如「520」; 謝謝高手指點迷津!
踩個腳印,回去看看
======================================
匯編的代碼給你,相關的注釋也寫了,設計自己弄一下吧
SER EQU P1.0 ; TPIC6B595 第3腳
OE EQU P1.1;TPIC6B595 第8腳
RCK EQU P1.2;TPIC6B595 第12腳
MR EQU P1.3;TPIC6B595 第9腳
SRCLK EQU P1.4;TPIC6B595 第13腳
ORG 0000H
LJMP MAIN
ORG 0100H
;**************************主程序**********************************
MAIN: MOV SP,#70H
SETB OE
MOV 2BH,#00H
MOV 27H,#00H
START: ;初始化寄存器RAM單元
MOV R0, #30H
MOV R1,#64H ;30H~6FH單元清零
MOV A, #00H
ST: MOV @R0,A
INC R0
DJNZ R1,ST
;2Dh------定址偏址 ;整屏四個字一起顯示
LOOP:MOV DPTR,#TAB;賦查表初值
MOV R3,#56
PLAY: MOV 2DH,#00H
MOV 2FH,#10H
GG: LCALL LINE16;掃描顯示一次
MOV 2DH,#00H
DJNZ 2FH,GG
MOV A,DPL
CLR C
ADD A, #16
MOV DPL ,A
MOV A, DPH
ADDC A ,#00H
MOV DPH, A
DJNZ R3,PLAY
SJMP START
LINE16: MOV 2BH,#16;掃16行,2BH放後還剩幾行
FF: LCALL LINE1;掃描顯示一行子程序
DJNZ 2BH,FF;掃描行直到16行掃完再轉
RET
LINE1:LCALL MSTR;將顯示的內容移入內存單元
LCALL SEND;發送串口子程序
LCALL XH;選通行子程序
RET
MSTR: ;顯示內容移入內存單元
MOV R0,#30H
MOV R4,#9
MOV A,2DH;
BB: MOVC A,@A+DPTR
MOV @R0,A
INC R0
MOV A,2DH
ADD A,#16;加16移到下一行
MOV 2DH,A
DJNZ R4,BB
MOV A,2DH
SUBB A,#143
MOV 2DH,A
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$發送數據到串口子程序$$$$$$$$$$$$$$$$$$$$$$$$$
SEND:MOV R0,#30H
MOV R5,#8 ;一行有8個位元組,如每次顯示字數不同要作相應改動
SETB OE
SETB MR
CLR SRCLK
CLR RCK
SETB P1.6
SETB P1.7
LQ: CLR C
MOV R2,#8
MOV A,@R0
; CPL A ;TPIC6B595應該不用這一步
LCALL DD1;調用顯示一個位元組的子程序
INC R0;指向下一個顯示單元
DJNZ R5,LQ
RET
DD1: CLR SRCLK;清串列CP端
RLC A;
MOV SER,C
SETB SRCLK ;觸發串列CP端
DJNZ R2,DD1;每個位元組移8次夠了向下執行
RET
;選通行子程序
XH: CLR RCK ;將輸出CP變成低電平為上升沿做准備
NOP
SETB RCK
CLR P1.6
;CLR P1.7
MOV A,27H
MOV P0,A
CLR OE
LCALL DE25MS
INC A
SETB OE
SETB P1.6
MOV A,27H
ANL A,#0F0H
SWAP A
ADD A,#01H
SWAP A
MOV 27H,A
CLR MR
SETB MR
RET
DE25MS: MOV R5,#09H
DEL2: MOV R6,#0FH
DEL3: MOV R7,#01H
DJNZ R7,$
DJNZ R6,DEL3
DJNZ R5,DEL2
RET
TAB:
字型檔
END
兩點說明:
1. 上述程序可以整屏四個字一起顯示,要是要顯示你說的那麼些字,還得作半屏控制,實現漢字滾動,太麻煩,一時半會兒出不來。
2.
TAB:
字型檔
END
上面的字型檔根據你要顯示的字,自己弄一下吧,給你個例子:
顯示「歡迎光臨」的話,字型檔為:
TAB: ;歡
DB 00H,20H,3CH,10H
DB 44H,08H,84H,04H
DB 04H,03H,04H,03H
DB 84H,04H,44H,08H
DB 3CH,10H,00H,20H
DB 00H,00H,07H,20H
DB 04H,10H,0F4H,0FH
DB 04H,10H,1CH,20H
;迎
DB 00H,00H,49H,20H
DB 6AH,10H,0DCH,0FH
DB 08H,10H,00H,20H
DB 0FEH,27H,02H,22H
DB 02H,21H,81H,20H
DB 00H,20H,02H,20H
DB 0FEH,2FH,02H,22H
DB 02H,22H,0FEH,21H
;光
DB 00H,00H,00H,20H
DB 22H,20H,24H,20H
DB 28H,10H,30H,08H
DB 0E0H,07H,3FH,00H
DB 20H,00H,0F0H,3FH
DB 28H,20H,24H,20H
DB 22H,20H,20H,20H
DB 00H,38H,00H,00H
;臨
DB 00H,00H,0F0H,03H
DB 00H,00H,00H,00H
DB 0FFH,3FH,00H,00H
DB 40H,00H,20H,3FH
DB 10H,21H,0FH,21H
DB 14H,21H,24H,3FH
DB 44H,21H,04H,21H
DB 04H,21H,04H,3FH
DB 00H,00H,00H,00H
END ;程序結束
㈤ c語言迷宮問題,以一個m×n的長方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。
說一下我的想法吧
1 把初始點放入一個隊列
2 出隊列->獲取該點的上下左右坐標,並且是有意義的坐標(不超出邊界,不是障礙)
3 將 2 獲取的點 判斷是不是終點 是結束 不是繼續
4 將 2 獲取的點 加入隊列 重復 234步驟
有些細節可以需要注意,可能你要排除重復的點不加入該隊列 不然會造成上下點死循環
㈥ 一條文字數字謎!!!高分
已知條件:
ABCDEF*F=EFABCD,
隱含條件:
F不等於0、1,最可能是2、3
則將2、3代入,根據已知條件試算,
(1)若F=2,則推導出:D=4、B=1;根據已知條件,由於2×4+(1或0)不可能等於1,等式不成立;排除。
(2)若F=3,則推導出:D=9,且A不可能大於3;
若A=0;根據已知條件,則E=1或2,
當E=1時C=3,C與F均為3,排除;
當E=2時C=6,B=7;此時等式076923×3=230769成立。
其它若F>3,試一試都不對。
然後令F等於0、1、2、3.....9,然後通過上算式的關系依次推出直至結果出來!
㈦ c語言中%u的使用不太明白,對運行後輸出一大串的數字感到迷惑不解
負數在內存中存儲的格式是補碼,-3的補碼是 0XFFFFFFFFC,所以輸出了4294967292
㈧ c語言數字迷宮問題怎麼做圖片如下
可以參考八皇後問題用回溯的方式來解決。
這道迷宮題,觀察一下,與某個格子相鄰的格子至多為4個,也就是有4種可能的前進方向,需要窮舉所有可能。在窮舉下一種可能前,需要恢復初始狀態(即回溯)。寫了一個簡單的代碼,還有很多需要優化的地方,但關鍵是能用^_^,你可以調試一下,把實現的思路寫出來,就可以順利完成這道題了。
#include <stdio.h>
#include <string.h>
/***
1、 迷宮大小n*n,擴展為(n+2)*(n+2),外圍一圈的格子作為不可再前進的邊界。
2、 若所有相鄰格子均已訪問,表明此路不通,回溯。
3、 計數器達到總步數,檢查是否位於終點及中間路徑是否合法,通過則顯示。
4、 查找函數Lookup()以遞歸方式反復調用自身,a->b->c->...,以查找某條可能的路徑。
...c,b,a等返回前,均回溯,逐步恢復tag。
離開a時,tag已經恢復到初始狀態,如此就不影響查找其他路徑了。
5、 若迷宮夠大或數據特別,都可能存在不同的路線
6、 先查看main(),了解基本步驟及初始化過程
***/
const int N = 6;
// eg1. N = 6
int row[N] = { 0, 4, 3, 1, 3, 0}; // 4 + 3 + 1 + 3 = 11
int col[N] = { 0, 1, 4, 3, 3, 0};
// eg2. N = 6
//int row[N] = { 0, 3, 4, 4, 2, 0}; // 3 + 4 + 4 + 2 = 13
//int col[N] = { 0, 3, 2, 4, 4, 0};
// eg3. N = 8
//int row[N] = { 0, 3, 1, 4, 3, 3, 1, 0};
//int col[N] = { 0, 1, 1, 5, 3, 1, 4, 0};
// 計數器
// Lookup()用g_counter與COUNTER比較是否走到了規定的步數
int g_counter = 0; // 無論是否成功,每查找一條路徑後自動恢復為0
int COUNTER = 0; // 總步數,等於row(或col)數組各元素之和,在main()中初始化
// Lookup()用tag記錄行走狀況
// 在main()中初始化
// 每查找一條路徑後自動恢復為初始狀態
struct _tag
{
int row[N];
int col[N];
int arr[N][N]; // 走過,按順序標記
} tag;
// 顯示迷宮
// inside為false時,列印擴展的迷宮
// inside為true時,列印未擴展的迷宮
void Display(bool inside)
{
int i, j;
for (i = 0; i < N; i++)
{
if ((i == 0 || i == N-1) && inside)
continue;
for (j = 0; j < N; j++)
{
if ((j == 0 || j == N-1) && inside)
printf("%4s", " ");
else
printf("%4d", tag.arr[i][j]);
}
printf(" ");
}
printf(" ");
}
// 檢查路徑是否符合已給條件
bool Check()
{
bool b = true;
int sum_row, sum_col;
for (int i = 1; i < N-1; i++)
{
sum_row = 0;
sum_col = 0;
for (int j = 1; j < N-1; j++)
{
sum_row += tag.arr[i][j] > 0 ? 1 : 0;
sum_col += tag.arr[j][i] > 0 ? 1 : 0;
}
if (sum_row != row[i] || sum_col != col[i])
{
b = false;
break;
}
}
return b;
}
// 遞歸查找路徑,返回前擦除痕跡,恢復現場
// 當前訪問的格子(i,j),i:行坐標,j:列坐標
void Lookup(int i, int j)
{
g_counter++; // 總步數加1
tag.arr[i][j] = g_counter; // visited
tag.row[i]--; // 行計數減1
tag.col[j]--; // 列計數減1
// 走完了
if (g_counter >= COUNTER)
{
// 位於終點,且路徑合法
if (i == N-2 && j == N-2 && Check())
{
Display(true);
}
// 此格子已判別,恢復現場,以查找其他路徑(此即回溯的思想)
tag.arr[i][j] = 0;
tag.row[i]++;
tag.col[j]++;
g_counter--;
return;
}
// 行方向
if (tag.row[i] > 0)
{
if (!tag.arr[i][j+1])
{
Lookup(i, j+1); // 從當前格子向右走一步
}
if (!tag.arr[i][j-1])
{
Lookup(i, j-1); // 從當前格子向左走一步
}
}
// 列方向
if (tag.col[j] > 0)
{
if (!tag.arr[i+1][j])
{
Lookup(i+1, j); // 從當前格子向下走一步
}
if (!tag.arr[i-1][j])
{
Lookup(i-1, j); // 從當前格子向上走一步
}
}
// 此格子已判別,恢復現場,以查找其他路徑(此即回溯的思想)
tag.arr[i][j] = 0;
tag.row[i]++;
tag.col[j]++;
g_counter--;
}
int main()
{
// 格子初始化為全0
memset(tag.arr, 0, sizeof(tag.arr));
for (int i = 0; i < N; i++)
{
tag.row[i] = row[i];
tag.col[i] = col[i];
COUNTER += row[i];
tag.arr[0][i] = 1;
tag.arr[N-1][i] = 1;
tag.arr[i][0] = 1;
tag.arr[i][N-1] = 1;
}
printf("初始化: ");
Display(false);
printf("合法路徑: ");
Lookup(1, 1); // 從格子(1, 1)出發
//getchar();
return 0;
}
㈨ 數字謎,誰告訴我
1 4 2 8 5 7
× 3
———————
4 2 8 5 7 1
A是1
B是4
C是2
D是8
E是5
F是7
㈩ c語言編程 ——數字迷
#include<stdio.h>
intmain()
{
intT,R,e,n,i,g,v,q,Q,C,E,G,I,N,V;
inta,b,c;
#include<stdio.h>
intmain()
{
intT,R,e,n,i,g,v,q,Q,C,E,G,I,N,V;
inta,b,c;
for(i=4;i<=9;i=i+5){
for(v=8;v<=9;v++){
for(e=1;e<=9;e=e+2){
for(n=0;n<=9;n++){
for(g=0;g<=9;g++){
for(c=1;c<=9;c++){
for(q=0;q<=9;q++){
a=v*10000+i*1000+n*100+g*10+1;
b=(c*1000+i*100+n*10+q)*2;
c=100000+e*1000+n*100+10+e;
if((a+b)==c){
printf("%d:%d",C,c);
printf("%d:%d",E,e);
printf("%d:%d",G,g);
printf("%d:%d",I,i);
printf("%d:%d",N,n);
printf("%d:%d",Q,q);
printf("R:0 ");
printf("T:1 ");
printf("%d:%d",V,v);}}}}}}}}
return 0;
}