㈠ 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還有意義么.