编程益智题
❶ 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一记,有时间再想办法