㈠ 关于乘除法数字谜的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;
}