当前位置:首页 » 编程语言 » c语言的趣味题
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言的趣味题

发布时间: 2022-12-25 03:01:07

c语言趣味题目 求代码和答案 谢谢 !

将四人用1, 2, 3, 4 编号,用枚举法解决
变量x 表示做好事者的编号序号,则x 从1到4,四个人所说的话分别写成:
a 说:x != 1
b 说:x == 3
c 说:x == 4
d 说:x != 4
当这4 个逻辑式值相加等于3 时,即为解答
#include <stdio.h>
int main( )
{
int x;
for (x = 1; x <= 4; ++ x)
if ((x != 1) + (x == 3) + (x == 4) + (x != 4) == 3)
printf("Is %c\n.", (char)(64 + x));
}

㈡ c语言 我看到一个很有意思的题;有兴趣的进来分析一下!

错了
char类型可以做加减法的
对应的是ASC||码中的码值

上面for(i='x';i<='z';i++)
意思是,i的值是字符x或者x的ASC||码值
所以i++之后,下一次循环,i的值就是y

这个是char型的基础概念

㈢ 有道C语言的趣味题那位大哥帮忙看一下~不胜感激

先给个启发
如果答案发邮件给我[email protected]
我觉得这种题自己思考来得有意思
跳水名将
问题描述:5位跳水高手参加10米高台跳水决赛,有好事者让5人据实力预测比赛结果.
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一.
决赛成绩公布之后,每位选手的预测都只说对了一半,即一对一错.请编程解出
比赛的实际名次.
#include <iostream.h>
void main()
{
int cc1,cc2,cc3,cc4,cc5; //cc1到cc5代表5位选手的逻辑判断
int A,B,C,D,E; //A,B,C,D,E分别代表5位选手的名次
int g; //问题是否解决的BOOL值
for(A=1; A<=5; A++)
for(B=1; B<=5; B++)
{for(C=1; C<=5; C++)
{for(D=1; D<=5; D++)
{ for(E=1; E<=5; E++)
{ cc1=((B==2)&&(!(A==3)))||((!(B==2))&&(A==3));
cc2=((B==2)&&(!(E==4)))||((!(B==2))&&(E==4));
cc3=((C==1)&&(!(D==2)))||((!(C==1))&&(D==2));
cc4=((C==5)&&(!(D==3)))||((!(C==5))&&(D==3));
cc5=((E==4)&&(!(A==1)))||((!(E==4))&&(A==1));
if(((cc1+cc2+cc3+cc4+cc5)==5)&&(A!=B)&&(A!=C)&&(A!=D)&&(A!=E)&&(B!=C)&&(B!=D)&&(B!=E)&&(C!=D)&&(C!=E)&&(D!=E))
{ g=1;
cout<<"A的名次是:"<<A<<endl;
cout<<"B的名次是:"<<B<<endl;
cout<<"C的名次是:"<<C<<endl;
cout<<"D的名次是:"<<D<<endl;
cout<<"E的名次是:"<<E<<endl;
}}}}};

if(g!=1)
cout<<"Can't found!"<<endl;
}

㈣ C/C++编程趣味题

妈妈的,虽然我程序写的很垃圾,还是把这道题给算出来的!

看在我费了这九牛二虎之力的份上,希望楼主多赏点分!!!

程序如下:
#include <vector>
#include <cstdio>
#include <ctype.h>
using namespace std;
#define maxsize 100

typedef int elemtype;
typedef struct sqstack sqstack;//由于sqstack不是一个类型 而struct sqstack才是

char ch[7]={'+','-','*','/','(',')','='};//把符号转换成一个字符数组
int f1[7]={3,3,5,5,1,6,0};//栈内元素优先级
int f2[7]={2,2,4,4,6,1,0};//栈外的元素优先级

struct sqstack
{
elemtype stack[maxsize];
int top;
};

void Initstack(sqstack *s)
{
s->top=0;
}

void Push(sqstack *s,elemtype x)
{
if(s->top==maxsize-1)
printf("Overflow\n");
else
{
s->top++;
s->stack[s->top]=x;
}
}

void Pop(sqstack *s,elemtype *x)
{
if(s->top==0)
printf("underflow\n");
else
{
*x=s->stack[s->top];
s->top--;
}
}

elemtype Gettop(sqstack s)
{
if(s.top==0)
{
printf("underflow\n");
return 0;
}
else
return s.stack[s.top];
}

elemtype f(char c)
{
switch(c)
{
case '+':
return 0;
case '-':
return 1;
case '*':
return 2;
case '/':
return 3;
case '(':
return 4;
case ')':
return 5;
default:
return 6;
}
}

char precede(char c1,char c2)
{
int i1=f(c1);
int i2=f(c2);//把字符变成数字
if(f1[i1]>f2[i2])//通过原来设定找到优先级
return '>';
else if(f1[i1]<f2[i2])
return '<';
else
return '=';
}

int Operate(elemtype a,elemtype theta,elemtype b)
{
int sum;

switch(theta)
{
case 0:
sum=a+b;
break;
case 1:
sum=a-b;
break;
case 2:
sum=a*b;
break;
default:
sum=a/b;
}
return sum;
}

int EvaluateExpression(char *exper)
{
char c;
int i=0,sum=0,idx=0;
int k=1,j=1;//设置了开关变量
elemtype x,theta,a,b;
sqstack OPTR,OPND;

Initstack(&OPTR);
Push(&OPTR,f('='));//0压入栈
Initstack(&OPND);
c=exper[idx++];
//先对+和-的情况忽略和左括号的情况
if(c==ch[2]||c==ch[3]||c==ch[5]||c==ch[6])
{
//printf("错误1 \n");
k=0;
return 0;
}

if(c==ch[0])
c=exper[idx++];//如果是+,把它覆盖
if(c==ch[1])
{
j=0;
c=exper[idx++];//也把-号覆盖
}
while(c!='='||ch[Gettop(OPTR)]!='=')
{
if(isdigit(c))
{
sum=0;
while(isdigit(c))
{
if(!j)
{
//实现了数字串前面有负号(之前是:sum=-(sum*10)-(c-'0')结果是-12+13=21)
sum=sum*10-(c-'0');
}
else
sum=sum*10+(c-'0');
c=exper[idx++];
}
//如果还是数字先不压栈,把数字串转化成十进制数字再压栈
Push(&OPND,sum);
j=1;
}
else
if(k)
{
switch(precede(ch[Gettop(OPTR)],c))
{
case'<': Push(&OPTR,f(c));//把它们整型化
c=exper[idx++];
//要除去下个是‘(’的情况 也把以运算符归到这里来
if(c==ch[0]||c==ch[1]||c==ch[2]||c==ch[3]||c==ch[5]||c=='\n')
{
//printf("出错2\n");
k=0;
return 0;//加了开关变量和返回0的值使程序更以操作
}

break;
case'=': Pop(&OPTR,&x);
c=exper[idx++];
//把ch[6]的情况也忽略了但此时并没有注意到右括号后面右运算符的情况
if(c==ch[0]||c==ch[1]||c==ch[2]||c==ch[3]||c==ch[5]||c=='\n')
{
//printf("出错2\n");
k=0;
return 0;
}

break;
case'>': Pop(&OPTR,&theta);
Pop(&OPND,&b);
Pop(&OPND,&a);//注意这里是谁先出栈
Push(&OPND,Operate(a,theta,b));
break;
}
}
}//在这里判断是否以运算符结束是不对的

return(Gettop(OPND));
}

int main()
{

vector<char> exper;
const char ops[]={'-','+'};
char exp[30];
int i,value,x[8],z[8];

for(x[0]=0;x[0]<2;x[0]++)
for(x[1]=0;x[1]<2;x[1]++)
for(x[2]=0;x[2]<2;x[2]++)
for(x[3]=0;x[3]<2;x[3]++)
for(x[4]=0;x[4]<2;x[4]++)
for(x[5]=0;x[5]<2;x[5]++)
for(x[6]=0;x[6]<2;x[6]++)
for(x[7]=0;x[7]<2;x[7]++)
for(z[0]=0;z[0]<=x[0];z[0]++)
for(z[1]=0;z[1]<=x[1];z[1]++)
for(z[2]=0;z[2]<=x[2];z[2]++)
for(z[3]=0;z[3]<=x[3];z[3]++)
for(z[4]=0;z[4]<=x[4];z[4]++)
for(z[5]=0;z[5]<=x[5];z[5]++)
for(z[6]=0;z[6]<=x[6];z[6]++)
for(z[7]=0;z[7]<=x[7];z[7]++)
{
exper.clear();
for(i=0;i<9;i++)
{
exper.push_back('1'+i);
}
for(i=8;i>0;i--)
{
if(x[i-1])
{
exper.insert(exper.begin()+i,ops[z[i-1]]);
}
}

for(i=0;i<exper.size();i++)
{
exp[i]=exper[i];
}
exp[i]='=';
exp[i+1]=0;

value=EvaluateExpression(exp);
if(value==100)
{
printf("%s%d\n",exp,value);
}
}
return 0;
}

运行输出:
123-45-67+89=100
123+45-67+8-9=100
123+4-5+67-89=100
123-4-5-6-7+8-9=100
12+3-4+5+67+8+8=100
12-3-4+5-6-7+89=100
12+3+4+5-6-7+89=100
1+23-4+56+7+8+9=100
1+23-4+5+6+78+9=100
1+2+34-5+67-8+9=100
1+2+3-4+5+6+78+9=100

补充:
刚才漏了几个头文件!

㈤ C语言趣味题

#include<stdio.h>
#include<stdlib.h>
int saving,*save;
void check(int i,int first,int N,int total,int *num)
{ int j,k;
save[saving]=i;
saving++;
for(j=i+1;j<N;j++)
{ check(j,first+num[j],N,total,num);//递归check
//若经过排序这里如果first+num[j]>total的话就可以return了
if(first+num[j]==total)
{ for(k=0;k<saving;k++)
printf("%d ",num[save[k]]);
printf("%d\n",num[j]);
}
}
saving--;
}

void main()
{int N,total,i=0,j,temp;
int *num;
saving=0;
printf("input N:");
scanf("%d",&N);
num=(int *)malloc(sizeof(int)*(N+1));
save=(int *)malloc(sizeof(int)*(N+1));
printf("input %d num:",N);
for(i=0;i<N;i++)
scanf("%d",&num[i]);//对这N个数排序可提高效率^^
printf("input total:");
scanf("%d",&total);
for(i=0;i<N;i++)//算法从这里正式开始!!!
check(i,num[i],N,total,num);
}
希望能解决您的问题。

㈥ 几个简单的c语言小问题 解决一题给十分

一。 d=20 if(a) d=d-10; a=0 if条件语句为假不执行 else if(!b) 不执行 if(!c) d=15; else d=25;是 else if(!b)下的语句 也不执行
二。 x=1 y=z=x; 赋值语句 x先赋给z 再赋给y x=y==z 先判断条件语句 y==z 是真
的 语句值为1 再赋给x
三。 第三题是要干什么

㈦ C语言趣味问题求代码和解法!3Q了

#include<stdio.h>intmain(){inti=6,num=1;for(i=6;i>=1;i--){printf("第%d天,桃子数为%d ",i,num);num=(num+1)*2;}return0;}

㈧ C语言几道简单的题目

【B】2.变量a与b分别初始为10与20,正确的语句是:
A:
int
a=10,
int
b=20;
B:
int
a=10,
b=20;
C:
int
a=10;
b=20;
D:
int
a=10;
b=20,
【C】3.以下选项中正确的C语言常量是:
A:
0xEfGh
B:
'XYZ'
C:
12.34e5
D:
'\5A'
【A】4.设有double
x;char
s[50];输出双精度浮点数x和字符串s,正确的语句是:
A:
printf("%lf
%s",x,s);
B:
printf("%ld
%s",x,s);
C:
printf("%lf
%s",&&x,s);
D:
printf("%lf
%s",x,s[50]);
【B】5.语句printf("%.1f,%d\n",10./4,10/8);的输出是:
A:
2.5,1.25
B:
2.5,1
C:
1,1.25
D:
2,1.25
【B】6.设有char
ch;
与语句“ch=getchar();”等价的语句是:
A:
scanf("%c",ch)
B:
scanf("%c",&ch);
C:
printf("%c",ch);
D:
printf("%c",&ch);
【C】7.
设int
n,m;
使m为n的十进制百位数的语句是:
A:
m
=
n/100;
B:
m
=
n%100;
C:
m
=
n/100%10;
D:
m
=
n%10/100;
【C】8.设float
x,y;
使y为x的小数部分的语句是:
A:
y
=
(int)x;
B:
y
=
int(x);
C:
y
=
x-(int)x;
D:
y
=
x-int(x);
【C】9.
与语句“m
+=
(x=5)
+
(--y);”等价的语句序列是:
A:
m=m+x+y;
x=5;
y=y-1;
B:
x=5;
m=m+x+y;
y=y-1;
C:
x=5;
y=y-1;
m=m+x+y;
D:
y=y-1;
m=m+x+y;
x=5;
【B】10.
设int
n;
对应“n为二位数(10至99)”的判断表达式是:
A:
10<=n<=99
B:
10<=n
&&&&
n<=99
C:
10<=n
||
n<=99
D:
10<=n,
n<=99
【A】11.
设char
ch;
判断“ch为数字字符”的表达式是:
A:
ch>='0'
&&&&
ch<='9'
B:
ch>0
&&&&
ch<9
C:
ch>='0'
||
ch<='9'
D:
ch>=0
||
ch<=9
【A】12.
与语句“x+=(a++==b)?c:--d;”功能等价的语句段是:
A:
if
(a==b)
{
a=a+1;
x=x+c;
}
else
{
a=a+1;
d=d-1;
x=x+d;
}
B:
a=a+1;if
(a==b)
{
x=x+c;
}
else
{
d=d-1;
x=x+d;
}
C:
if
(a==b)
{
a=a+1;
x=x+c;
}
else
{
a=a+1;
x=x+d;
d=d-1;
}
D:
if
(a==b)
{
a=a+1;
x=c;
}
else
{
a=a+1;
d=d-1;
x=d;
}
【C】13.
设有in
i;
写出下列语句的运行结果:
for
(i=0;i<5;i++)
printf("%d",i);
A:
0123456
B:
012345
C:
01234
D:
0123
【C】14.
设有char
ch;
写出下列语句的运行结果:
for
(ch='B';ch<='F';ch++)
putchar(ch);
A:
ABCDEFG
B:
ABCDEF
C:
BCDEF
D:
BCDEFG
【A】15.
以下一维数组定义中,正确的是:
A:
int
a[5]
=
{
1,2,3,4,5
};
B:
int
a[5]
=
1,2,3,4,5;
C:
int
a[1
to
5];
D:
int
a[]
【D】16.以下字符串定义与赋值中,正确的是:
A:
char
s[80];
s
=
{'A',
'B',
'C'};
B:
char
s[80];
s
=
"ABC";
C;
char
s[80]
=
{"A",
"B",
"C"};
D:
char
s[80]
=
"ABC";
【B】17.
在字符串常用函数中,用于复制字符串的函数是:
A:
strlen
B:
strcpy
C:
strcat
D:
strcmp
【B】18.
设有定义:int
i,
a[10];
能正确输入a数组各元素的语句是:
A:
i=10;
scanf("%d",
&a[i]);
B:
for(i=0;
i<=9;
i++)
scanf("%d",
a+i);
C:for(i=0;i<10;i++)scanf("%d",a[i]);D:for(i=0;i<10;i++)scanf("%d",
&a);
【B】19.
设有定义:int
a[10]={6,7,8,9,10};正确的解释是:
A:
将5个初值依次赋给a[1]至a[5]
B:
将5个初值依次赋给a[0]至a[4]
C:
将5个初值依次赋给a[6]至a[10]
D:
将5个初值依次赋给a[5]至a[9]

㈨ 趣味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语言 ACM或者趣味题目

你要这些题目的目的是什么,不就是为了锻炼自己的编程水平么,那还要别人解释算法干什么,这对你能起到锻炼作用么.

这算胡言乱语?做ACM之类的题目,不就是要你自己独立思考么,在失败N次后你可以向别人求助算法,思路,但不能一开始就要知道算法,那样做ACM还有意义么.