編程益智題
❶ C/C++編程趣味題
#include<iostream.h>
void main()
{
int d[8]={0},b[9]={1,2,3,4,5,6,7,8,9};
long A[9],B[8];
int i,j,k,lenb,lend;
for(d[0]=0; d[0]<3; d[0]++)//1 2間的運算符
for(d[1]=0; d[1]<3; d[1]++)//2 3間的運算符
for(d[2]=0; d[2]<3; d[2]++)//3 4間的運算符
for(d[3]=0; d[3]<3; d[3]++)//4 5間的運算符
for(d[4]=0; d[4]<3; d[4]++)//5 6間的運算符
for(d[5]=0; d[5]<3; d[5]++)//6 7間的運算符
for(d[6]=0; d[6]<3; d[6]++)//7 8間的運算符
for(d[7]=0; d[7]<3; d[7]++)//8 9間的運算符
{
j=0,k=0, A[0]=b[0];
for(i=0;i<8;i++){
if(d[i]!=0){
j++;
A[j]=b[i+1];
}
if(d[i]==0)
A[j]=10*A[j]+b[i+1];//A存放數據
else if(d[i]==1)
B[k++]=1; //B存放運算符
else
B[k++]=2;
}
lenb=j;
lend=k;
char c[8];long sum=A[0];
for(i=0;i<lend;i++){
if(B[i]==1){
sum=sum+A[i+1];
c[i]='+';
}
else if(B[i]==2){
sum=sum-A[i+1];
c[i]='-';
}
}
if(sum==100){
for(j=0;j<lend;j++)
cout<<A[j]<<c[j];
cout<<A[j]<<'='<<sum<<endl;
}
}
}
正如樓主所說,生成運算符的數組是非常麻煩的,希望有人能夠解決.
由運算符生成數據的演算法我自認為還可以,有什麼問題希望能夠討論!
不好意思,未加註釋,讀起來可能會痛苦
絕對支持此類問題
注:借鑒一樓
我們的演算法大都一樣,用1代表+,用2代表-,沒有運算符就用0來替代
所以就可以把所有可能的運算符數組用 (如果有n種運算可視為n+1進制的數) 3進制的整數替代,工有3^8種組合;
即可以把for 循環中的d[8]改為
d[8]={0}; //初始化全為0
for(int i=0;i<3^8;i++){ //3的8次方用函數可求
int n=8;
do
d[--n]=i%3;
while(i=i/3);
}
雖然在演算法的復雜度上沒什麼提高,但書寫起來就要方便很多
❷ 初級c++語言奧數編程問題(新人求教)
函數功能說明
比較兩個游戲玩家的輸入,根據輸入和游戲規則返回遊戲結果
@paramonePerson第一個人選中的輸入參數(石頭,剪刀,布)
@paramsecondPerson第一個人選中的輸入參數(石頭,剪刀,布)
@return0打成平手,1第一個人勝利2第二個人勝利
intfunctioncompareGames(charonePerson,charsecondPerson)
{
if(onePerson=='s')
{
if(secondPerson=='p')
return1;
elseif(secondPerson=='r')
return2;
else
return0;
}
elseif(onePerson=='p')
{
if(secondPerson=='p')
return0;
elseif(secondPerson=='r')
return1;
else
return2;
}
else
{
if(secondPerson=='p')
return2;
elseif(secondPerson=='r')
return0;
else
return1;
}
}
❸ 三道小編程題目,在線恭迎大神賜教!
13
3
double
❹ 趣味編程數學題
我就輸入偽代碼了
for i:=0 to 13 do
for j:=0 to 30-i do
begin
k:=30-i-j;
if 3i+2j+k=50 then writeln(i,' ',j,' ',k);
end;
❺ c語言編程題 題目標題: 猜年齡 美國數學家維納(N.Wiener)智力早熟,11歲就
c語言追求的是程序執行時間效率,題目給出立方之後是四位數,可以人為確定年齡范圍在10-21歲,至於為什麼不確定六位數再精確一點,個人覺得沒什麼必要。這個編程的核心在於如何分辨這10個數字不同,我定義了一個函數,用數組加循環判斷。以下是具體代碼。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
intsame(inta[10]);//判斷10個數是否相等,相互不相等返回1
intmany(inta);//判斷一個整型數是幾位數
main()
{
inta[10],i,j,s,l;//a儲存10個數字的數組,i年齡循環變數,j將數字存入數組,s儲存四位數,l儲存六位數
for(i=10;i<22;i++){
s=pow((double)i,3);
l=pow((double)i,4);
if(many(l)!=6)
continue;//如果不是六位數則退出當次循環
for(j=0;j<4;j++){
a[j]=s%10;
s=s/10;
}//存入四位數
for(j=4;j<10;j++){
a[j]=l%10;
l=l/10;
}//存入六位數
if(same(a))
printf("age=%d
",i);//輸出
}
system("pause");
}
intmany(inta){
inti=0;
while(a>0){
a=a/10;
i++;
}
returni;
}
intsame(inta[10]){
inti,j,flag=1;
for(i=0;i<10;i++){
for(j=i+1;j<10;j++){
if(a[i]==a[j])
flag=0;
}
}
returnflag;
}
❻ C\C++ 趣味編程題目
include <iostream>
using namespace std;
void main(){
int pirate[30];
int i,j,survived;
for(i=0;i<30;i++)
pirate[i]=0;
i=0;j=0;
for(survived=30;survived>1;){
if(pirate[i]==0){
j++;
if(j%7==0){
pirate[i]=1;
cout<<"No."<<i+1<<" private jump"<<endl;
survived-=1;
}
}
i=(i+1)%30;
}
for(i=0;i<30;i++)
if(pirate[i]==0)
cout<<"No."<<i+1<<" private survive"<<endl;
}
這個程序得到的答案是23號海盜生存,不知是否符合樓主的要求,呵呵
❼ c語言編程。高手請進,趣味益智題編程, 當n為任意值的時候,求最小需要多少步能使他完全顛倒,並輸
暫時沒想好演算法,要是規定每一步取幾個做置換不知是否行得通,另外如何找最小的也是個問題
初步的想法是用一個函數先置換,檢測是否完成,未完成則再次做置換,而關鍵可能就在於如何寫這個函數
是個復雜的問題,我暫時想到了用鏈表比較方便,做置換時,只需要修改指針即可,小弟不才暫時只寫了個簡單的鏈表,做了個初始化工作,先mark一記,有時間再想辦法