Problem Description
曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。
还有人称今后的某个世纪末的12月31日,如果是星期一则会....
有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!
于是,“谣言制造商”又修改为星期日......
1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?
请回答该年份(只写这个4位整数,不要写12月31等多余信息)
Input
无
Output
输出一个4位整数
#include <iostream>
using namespace std;
int main()
{
int days=0;
int e_days;
for(int i=2000;;i++)
{
e_days=365;
if((i%4==0&&i%100!=0)||i%400==0)
e_days=366;
days=days+e_days;
if(days%7==2&&(i-99)%100==0)
{
cout<<i;
break;
}
}
return 0;
}
小明和他的表弟一起去看电影,有人问他们的年龄。小明说:今年是我们的幸运年啊。我出生年份的四位数字加起来刚好是我的年龄。表弟的也是如此。假设今年是2014年(2014年的题),并且,小明说的年龄指的是周岁。
请推断并填写出小明的出生年份。
这是一个4位整数,请通过浏览器提交答案,不要填写任何多余的内容(比如,他表弟的出生年份,或是他们的年龄等等)
Input
无
Output
输出一个4为整数
#include <iostream>
using namespace std;
int main()
{
int count=0;
for(int i=1;i<30;i++)
{
int birthyear=2014-i;
int temp=birthyear;
int sum=0;
while(temp>0)
{
int k=temp%10;
sum=sum+k;
temp=temp/10;
}
if(sum==i)
{
count++;
if(count>1)
{
cout<<birthyear;
break;
}
}
}
return 0;
}
啤酒的数量
Problem Description
啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。
我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
注意:答案是一个整数。
不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。
Input
无
Output
输出一个整数
#include <iostream>
using namespace std;
int main()
{
int e_p=23;
int e_y=19;
int flag=0;
for(int y=2;y<100;y++ )
{
for(int p=1;p<y;p++)
{
if((p*e_p+y*e_y)==823)
{
cout<<p;
flag=1;
break;
}
}
if(flag==1)
break;
}
return 0;
}
求另一个解
Problem Description
请看下面的算式:
(ABCD - EFGH) * XY = 900
每个字母代表一个0~9的数字,不同字母代表不同数字,首位不能为0。
比如,(5012 - 4987) * 36 就是一个解。
请找到另一个解,并提交该解中 ABCD 所代表的整数。
注意:只提交 ABCD 所代表的整数,不要写其它附加内容,比如:说明性的文字。
Input
无
Output
输出一个4为数的整数
#include <iostream>
using namespace std;
int a[10]={0};
int b[10]={1};
void dfs(int m)
{
if(m>9)
return;
if(m=8)
{
if((a[0]*1000+a[1]*100+a[2]*10+a[3]-a[4]*1000+a[5]*100+a[6]*10+a[7])*(a[8]*10+a[9])==900)
{
cout<<a[0]<<a[1]<<a[2]<<a[3];
return;
}
}
for(int i=0;i<10;i++)
{
if(b[i]==1)
{
a[m]=i;
b[i]=0;
dfs(m+1);
b[i]=1;
}
}
}
int main()
{
dfs(0);
return 0;
}
Problem Description
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
Input
无
Output
输出一个整数
#include <iostream>
using namespace std;
int main()
{
/**
int a[13];
int count=0;
for(a[0]=0; a[0]<=4; a[0]++)
{
for(a[1]=0; a[1]<=4; a[1]++)
{
for(a[2]=0; a[2]<=4; a[2]++)
{
for(a[3]=0; a[3]<=4; a[3]++)
{
for(a[4]=0; a[4]<=4; a[4]++)
{
for(a[5]=0; a[5]<=4; a[5]++)
{
for(a[6]=0; a[6]<=4; a[6]++)
{
for(a[7]=0; a[7]<=4; a[7]++)
{
for(a[8]=0; a[8]<=4; a[8]++)
{
for(a[9]=0; a[9]<=4; a[9]++)
{
for(a[10]=0; a[10]<=4; a[10]++)
{
for(a[11]=0; a[11]<=4; a[11]++)
{
for(a[12]=0; a[12]<=4; a[12]++)
{
if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]+a[11]+a[12]==13)
{
count++;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
cout<<count;
**/
cout<<"3598180";
return 0;
}
Problem Description
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
注意:只提交另一6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。
#include <iostream>
using namespace std;
int shu[6]={0};
bool check(int m)
{
for(int i=0;i<6;i++)
{
if(m==shu[i])
return false;
}
return true;
}
int main()
{
int num;
int flag=1;
for(int a=1;a<10;a++)
{
for(int b=0;b<10;b++)
{
if(b==a)continue;
for(int c=0;c<10;c++)
{
if(c==a||c==b)continue;
for(int d=0;d<10;d++)
{
if(d==a||d==b||d==c)continue;
for(int e=0;e<10;e++)
{
if(e==a||e==b||e==c||e==d)continue;
for(int f=0;f<10;f++)
{
if(f==a||f==b||f==c||f==d||f==e)continue;
shu[0]=a;
shu[1]=b;
shu[2]=c;
shu[3]=d;
shu[4]=e;
shu[5]=f;
num=a*100000+b*10000+c*1000+d*100+e*10+f;
long int nn=num*num;
long int temp=nn;
while(temp>0)
{
int k=temp%10;
if(check(k)==false)
{
flag=0;
break;
}
temp=temp/10;
}
if(flag==1)
{
cout<<a<<b<<c<<d<<e<<f;
}
}
}
}
}
}
}
return 0;
}
Problem Description
小明从银行贷款3万元。约定分24个月,以等额本金方式还款。
这种还款方式就是把贷款额度等分到24个月。每个月除了要还固定的本金外,还要还贷款余额在一个月中产生的利息。
假设月利率是:0.005,即:千分之五。那么,
第一个月,小明要还本金 1250, 还要还利息:30000 * 0.005,总计 1400.00
第二个月,本金仍然要还 1250, 但利息为:(30000-1250) * 0.005 总计 1393.75
请问:小明在第15个月,应该还款多少(本金和利息的总和)?
请把答案金额四舍五入后,保留两位小数。注意:32.5,一定要写为:32.50
答案是一个含有小数点和两位小数的浮点数字。不要写多余内容(例如:多写了“元”或添加说明文字)
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float sum;
float ben=1250;
sum=(30000-1250*14)*0.005+ben;
printf("%.2f",sum);
return 0;
}
Problem Description
小明看到一本书上写着:任何数字的立方都可以表示为连续奇数的和。
比如:
2^3 = 8 = 3 + 5
3^3 = 27 = 7 + 9 + 11
4^3 = 64 = 1 + 3 + ... + 15
虽然他没有想出怎么证明,但他想通过计算机进行验证。
请你帮助小明写出 111 的立方之连续奇数和表示法的起始数字。如果有多个表示方案,选择起始数字小的方案。
注意:只提交一个整数,不要写其它附加内容,比如:说明性的文字。
#include <iostream>
using namespace std;
int main()
{
int n=111;
int nnn=n*n*n;
int sum=0;
int flag=0;
for(int i=1;i<nnn;i=i+2)
{
sum=i;
for(int j=i+2;j<nnn;j=j+2)
{
sum=sum+j;
if(sum>nnn)
break;
if(sum==nnn)
{
cout<<i;
flag=1;
break;
}
}
if(flag==1)
break;
}
return 0;
}
Problem Description
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector <int> a;
int num=5123123;
for(int i=0;i<100000;i++)
{
int temp=num;
num=0;
while(temp>0)
{
int k=temp%10;
num=num+k*k;
temp=temp/10;
}
a.push_back(num);
}
sort(a.rbegin(),a.rend());
cout<<a[0];
return 0;
}
填数游戏
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 9 Accepted Submission(s) : 7
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
如图(见QQ群)所示六角形中,填入1~12的数字。 使得每条直线上的数字之和都相同。
图中已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
#include<stdio.h>
#include<string.h>
int t[6];
int num[12];
void dfs(int cur){
t[0]=num[1]+num[4]+num[7]+num[9];
t[1]=num[2]+num[5]+num[4]+num[6];
t[2]=num[1]+num[5]+num[8]+num[12];
t[3]=num[6]+num[8]+num[11]+num[3];
t[4]=num[9]+num[10]+num[11]+num[12];
t[5]=num[2]+num[7]+num[10]+num[3];
//恰好放置12个数字,+1为13
if(cur==13){
//六个边的和恰好相同
if(t[0]==t[1] && t[1]==t[2] && t[2]==t[3] && t[3]==t[4] && t[4]==t[5] &&t[5]==t[0])
//打印结果
for(int f=1;f<=12;f++)
printf("%d ",num[f]);
}
//否则继续放置数字,从1开始逐个放置
else for(int i=1;i<=12;i++){
//标记变量
int ok=1;
for(int j=1;j<cur;j++){
//检查当前放置的数字是否在此之前放置过
if(num[j]==i)
ok=0; //如果放置过标记变量为0
}
if(ok){
//放置该数字
num[cur]=i;
//进行下一步搜索
dfs(cur+1);
}
}
}
int main(){
num[1]=1;num[2]=8;num[3]=3;
dfs(4);
return 0;
}
Problem Description
A 村的元宵节灯会上有一迷题:
请猜谜 * 请猜谜 = 请边赏灯边猜
小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。
请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可。
注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字。
#include<iostream>
using namespace std;
void find()
{
for(int q = 0;q <= 9;q++)
for(int c = 0;c <= 9;c++)
for(int m = 0;m <= 9;m++)
for(int b = 0;b <= 9;b++)
for(int s = 0;s <= 9;s++)
for(int d = 0;d <= 9;d++)
{
int cc[10] = {0};
cc[q]++;
cc[c]++;
cc[m]++;
cc[b]++;
cc[s]++;
cc[d]++;
if(cc[q]==1 && cc[c]==1 && cc[m]==1 && cc[b]==1 && cc[s]==1 && cc[d]==1 )
{
int qcm = q*100 + c*10 + m;
int qbsdbc = q*100000 + b*10000 + s*1000 + d*100 + b*10 + c;
if(qcm*qcm == qbsdbc)
{
cout<<qcm;
}
}
}
}
int main()
{
find();
return 0;
}
Problem Description
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
#include <iostream>
using namespace std;
int a[4];
bool check()
{
if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3])
return true;
else
return false;
}
int main()
{
int count=0;
int count2=0;
for(int i=1000;i<10000;i++)
{
int temp=i;
for(int j=0;j<4;j++)
{
a[j]=temp%10;
temp=temp/10;
}
if(check()==true)
{
for(int m=0;m<4;m++)
{
for(int n=0;n<4;n++)
{
if(m==n)continue;
for(int k=0;k<4;k++)
{
if(k==m||k==n)continue;
for(int l=0;l<4;l++)
{
if(l==m||l==n||l==k)continue;
if(a[m]*(a[n]*100+a[k]*10+a[l])==i)
count++;
if((a[m]*10+a[n])*(a[k]*10+a[l])==i)
count2++;
}
}
}
}
}
}
// cout<<count<<endl;
// cout<<count2/2<<endl;
count=count+count2/2;
cout<<count;
return 0;
}
Problem Description
小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。
其标价都是4位数字(即千元不等)。
小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了(图形不能上传,请参见QQ群)。
这种价牌有个特点,对一些数字,倒过来看也是合理的数字。如:1 2 5 6 8 9 0 都可以。这样一来,如果牌子挂倒了,有可能完全变成了另一个价格,比如:1958 倒着挂就是:8561,差了几千元啊!!
当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。
有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。
请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?
答案是一个4位的整数。
注意:不要提交解答过程,或其它辅助说明类的内容。
#include <iostream>
using namespace std;
int nums[7]={1,2,5,6,8,9,0};
int turn(int m)
{
if(m==6)
return 9;
else if(m==9)
return 6;
else
return m;
}
int change(int m)
{
int result=0;
int temp=m;
while(temp>0)
{
int k=temp%10;
result=result*10+k;
temp=temp/10;
}
return result;
}
int main()
{
int flag=0;
for(int a=0;a<6;a++)
{
if(flag==1)
{
break;
}
for(int b=0;b<7;b++)
{
if(flag==1)
{
break;
}
for(int c=0;c<7;c++)
{
if(flag==1)
{
break;
}
for(int d=0;d<7;d++)
{
if(flag==1)
{
break;
}
for(int e=0;e<6;e++)
{
if(flag==1)
{
break;
}
for(int f=0;f<7;f++)
{
if(flag==1)
{
break;
}
for(int g=0;g<7;g++)
{
if(flag==1)
{
break;
}
for(int h=0;h<7;h++)
{
int A=nums[a];
int B=nums[b];
int C=nums[c];
int D=nums[d];
int E=nums[e];
int F=nums[f];
int G=nums[g];
int H=nums[h];
int num1=A*1000+B*100+C*10+D;
int num2=E*1000+F*100+G*10+H;
A=turn(nums[a]);
B=turn(nums[b]);
C=turn(nums[c]);
D=turn(nums[d]);
E=turn(nums[e]);
F=turn(nums[f]);
G=turn(nums[g]);
H=turn(nums[h]);
int num1_c=A*1000+B*100+C*10+D;
int num2_c=E*1000+F*100+G*10+H;
num1_c=change(num1_c);
num2_c=change(num2_c);
int cha=num2_c+num1_c-num1-num2;
if(num1-num1_c>200&&num1-num1_c<300&&num2_c-num2>800&&num2_c-num2<900&&cha==558)
{
cout<<num1;
flag=1;
break;
}
}
}
}
}
}
}
}
}
return 0;
}
还有人称今后的某个世纪末的12月31日,如果是星期一则会....
有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!
于是,“谣言制造商”又修改为星期日......
1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?
请回答该年份(只写这个4位整数,不要写12月31等多余信息)
Input
using namespace std;
int main()
{
int days=0;
int e_days;
for(int i=2000;;i++)
{
e_days=365;
if((i%4==0&&i%100!=0)||i%400==0)
e_days=366;
days=days+e_days;
if(days%7==2&&(i-99)%100==0)
{
cout<<i;
break;
}
}
return 0;
}
小明和他的表弟一起去看电影,有人问他们的年龄。小明说:今年是我们的幸运年啊。我出生年份的四位数字加起来刚好是我的年龄。表弟的也是如此。假设今年是2014年(2014年的题),并且,小明说的年龄指的是周岁。
请推断并填写出小明的出生年份。
这是一个4位整数,请通过浏览器提交答案,不要填写任何多余的内容(比如,他表弟的出生年份,或是他们的年龄等等)
请推断并填写出小明的出生年份。
这是一个4位整数,请通过浏览器提交答案,不要填写任何多余的内容(比如,他表弟的出生年份,或是他们的年龄等等)
Input
无
Output
输出一个4为整数
using namespace std;
int main()
{
int count=0;
for(int i=1;i<30;i++)
{
int birthyear=2014-i;
int temp=birthyear;
int sum=0;
while(temp>0)
{
int k=temp%10;
sum=sum+k;
temp=temp/10;
}
if(sum==i)
{
count++;
if(count>1)
{
cout<<birthyear;
break;
}
}
}
return 0;
}
啤酒的数量
Problem Description
啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。
我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
注意:答案是一个整数。
不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。
我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
注意:答案是一个整数。
不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。
Input
无
Output
输出一个整数
#include <iostream>
using namespace std;
int main()
{
int e_p=23;
int e_y=19;
int flag=0;
for(int y=2;y<100;y++ )
{
for(int p=1;p<y;p++)
{
if((p*e_p+y*e_y)==823)
{
cout<<p;
flag=1;
break;
}
}
if(flag==1)
break;
}
return 0;
}
using namespace std;
int main()
{
int e_p=23;
int e_y=19;
int flag=0;
for(int y=2;y<100;y++ )
{
for(int p=1;p<y;p++)
{
if((p*e_p+y*e_y)==823)
{
cout<<p;
flag=1;
break;
}
}
if(flag==1)
break;
}
return 0;
}
求另一个解
Problem Description
请看下面的算式:
(ABCD - EFGH) * XY = 900
每个字母代表一个0~9的数字,不同字母代表不同数字,首位不能为0。
比如,(5012 - 4987) * 36 就是一个解。
请找到另一个解,并提交该解中 ABCD 所代表的整数。
(ABCD - EFGH) * XY = 900
每个字母代表一个0~9的数字,不同字母代表不同数字,首位不能为0。
比如,(5012 - 4987) * 36 就是一个解。
请找到另一个解,并提交该解中 ABCD 所代表的整数。
注意:只提交 ABCD 所代表的整数,不要写其它附加内容,比如:说明性的文字。
Input
无
Output
输出一个4为数的整数
#include <iostream>
using namespace std;
int a[10]={0};
int b[10]={1};
void dfs(int m)
{
if(m>9)
return;
if(m=8)
{
if((a[0]*1000+a[1]*100+a[2]*10+a[3]-a[4]*1000+a[5]*100+a[6]*10+a[7])*(a[8]*10+a[9])==900)
{
cout<<a[0]<<a[1]<<a[2]<<a[3];
return;
}
}
for(int i=0;i<10;i++)
{
if(b[i]==1)
{
a[m]=i;
b[i]=0;
dfs(m+1);
b[i]=1;
}
}
}
int main()
{
dfs(0);
return 0;
}
using namespace std;
int a[10]={0};
int b[10]={1};
void dfs(int m)
{
if(m>9)
return;
if(m=8)
{
if((a[0]*1000+a[1]*100+a[2]*10+a[3]-a[4]*1000+a[5]*100+a[6]*10+a[7])*(a[8]*10+a[9])==900)
{
cout<<a[0]<<a[1]<<a[2]<<a[3];
return;
}
}
for(int i=0;i<10;i++)
{
if(b[i]==1)
{
a[m]=i;
b[i]=0;
dfs(m+1);
b[i]=1;
}
}
}
int main()
{
dfs(0);
return 0;
}
Problem Description
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
Input
无
Output
输出一个整数
#include <iostream>
using namespace std;
int main()
{
/**
int a[13];
int count=0;
for(a[0]=0; a[0]<=4; a[0]++)
{
for(a[1]=0; a[1]<=4; a[1]++)
{
for(a[2]=0; a[2]<=4; a[2]++)
{
for(a[3]=0; a[3]<=4; a[3]++)
{
for(a[4]=0; a[4]<=4; a[4]++)
{
for(a[5]=0; a[5]<=4; a[5]++)
{
for(a[6]=0; a[6]<=4; a[6]++)
{
for(a[7]=0; a[7]<=4; a[7]++)
{
for(a[8]=0; a[8]<=4; a[8]++)
{
for(a[9]=0; a[9]<=4; a[9]++)
{
for(a[10]=0; a[10]<=4; a[10]++)
{
for(a[11]=0; a[11]<=4; a[11]++)
{
for(a[12]=0; a[12]<=4; a[12]++)
{
if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]+a[11]+a[12]==13)
{
count++;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
cout<<count;
**/
cout<<"3598180";
return 0;
}
using namespace std;
int main()
{
/**
int a[13];
int count=0;
for(a[0]=0; a[0]<=4; a[0]++)
{
for(a[1]=0; a[1]<=4; a[1]++)
{
for(a[2]=0; a[2]<=4; a[2]++)
{
for(a[3]=0; a[3]<=4; a[3]++)
{
for(a[4]=0; a[4]<=4; a[4]++)
{
for(a[5]=0; a[5]<=4; a[5]++)
{
for(a[6]=0; a[6]<=4; a[6]++)
{
for(a[7]=0; a[7]<=4; a[7]++)
{
for(a[8]=0; a[8]<=4; a[8]++)
{
for(a[9]=0; a[9]<=4; a[9]++)
{
for(a[10]=0; a[10]<=4; a[10]++)
{
for(a[11]=0; a[11]<=4; a[11]++)
{
for(a[12]=0; a[12]<=4; a[12]++)
{
if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]+a[11]+a[12]==13)
{
count++;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
cout<<count;
**/
cout<<"3598180";
return 0;
}
Problem Description
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
注意:只提交另一6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。
注意:不要书写其它的内容(比如:说明性的文字)。
#include <iostream>
using namespace std;
int shu[6]={0};
bool check(int m)
{
for(int i=0;i<6;i++)
{
if(m==shu[i])
return false;
}
return true;
}
using namespace std;
int shu[6]={0};
bool check(int m)
{
for(int i=0;i<6;i++)
{
if(m==shu[i])
return false;
}
return true;
}
int main()
{
int num;
int flag=1;
for(int a=1;a<10;a++)
{
for(int b=0;b<10;b++)
{
if(b==a)continue;
for(int c=0;c<10;c++)
{
if(c==a||c==b)continue;
for(int d=0;d<10;d++)
{
if(d==a||d==b||d==c)continue;
for(int e=0;e<10;e++)
{
if(e==a||e==b||e==c||e==d)continue;
for(int f=0;f<10;f++)
{
if(f==a||f==b||f==c||f==d||f==e)continue;
shu[0]=a;
shu[1]=b;
shu[2]=c;
shu[3]=d;
shu[4]=e;
shu[5]=f;
num=a*100000+b*10000+c*1000+d*100+e*10+f;
long int nn=num*num;
long int temp=nn;
while(temp>0)
{
int k=temp%10;
if(check(k)==false)
{
flag=0;
break;
}
temp=temp/10;
}
if(flag==1)
{
cout<<a<<b<<c<<d<<e<<f;
}
}
}
}
}
}
}
return 0;
}
{
int num;
int flag=1;
for(int a=1;a<10;a++)
{
for(int b=0;b<10;b++)
{
if(b==a)continue;
for(int c=0;c<10;c++)
{
if(c==a||c==b)continue;
for(int d=0;d<10;d++)
{
if(d==a||d==b||d==c)continue;
for(int e=0;e<10;e++)
{
if(e==a||e==b||e==c||e==d)continue;
for(int f=0;f<10;f++)
{
if(f==a||f==b||f==c||f==d||f==e)continue;
shu[0]=a;
shu[1]=b;
shu[2]=c;
shu[3]=d;
shu[4]=e;
shu[5]=f;
num=a*100000+b*10000+c*1000+d*100+e*10+f;
long int nn=num*num;
long int temp=nn;
while(temp>0)
{
int k=temp%10;
if(check(k)==false)
{
flag=0;
break;
}
temp=temp/10;
}
if(flag==1)
{
cout<<a<<b<<c<<d<<e<<f;
}
}
}
}
}
}
}
return 0;
}
Problem Description
小明从银行贷款3万元。约定分24个月,以等额本金方式还款。
这种还款方式就是把贷款额度等分到24个月。每个月除了要还固定的本金外,还要还贷款余额在一个月中产生的利息。
假设月利率是:0.005,即:千分之五。那么,
第一个月,小明要还本金 1250, 还要还利息:30000 * 0.005,总计 1400.00
第二个月,本金仍然要还 1250, 但利息为:(30000-1250) * 0.005 总计 1393.75
请问:小明在第15个月,应该还款多少(本金和利息的总和)?
请把答案金额四舍五入后,保留两位小数。注意:32.5,一定要写为:32.50
答案是一个含有小数点和两位小数的浮点数字。不要写多余内容(例如:多写了“元”或添加说明文字)
这种还款方式就是把贷款额度等分到24个月。每个月除了要还固定的本金外,还要还贷款余额在一个月中产生的利息。
假设月利率是:0.005,即:千分之五。那么,
第一个月,小明要还本金 1250, 还要还利息:30000 * 0.005,总计 1400.00
第二个月,本金仍然要还 1250, 但利息为:(30000-1250) * 0.005 总计 1393.75
请问:小明在第15个月,应该还款多少(本金和利息的总和)?
请把答案金额四舍五入后,保留两位小数。注意:32.5,一定要写为:32.50
答案是一个含有小数点和两位小数的浮点数字。不要写多余内容(例如:多写了“元”或添加说明文字)
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float sum;
float ben=1250;
sum=(30000-1250*14)*0.005+ben;
printf("%.2f",sum);
return 0;
}
#include <iomanip>
using namespace std;
int main()
{
float sum;
float ben=1250;
sum=(30000-1250*14)*0.005+ben;
printf("%.2f",sum);
return 0;
}
Problem Description
小明看到一本书上写着:任何数字的立方都可以表示为连续奇数的和。
比如:
2^3 = 8 = 3 + 5
3^3 = 27 = 7 + 9 + 11
4^3 = 64 = 1 + 3 + ... + 15
虽然他没有想出怎么证明,但他想通过计算机进行验证。
请你帮助小明写出 111 的立方之连续奇数和表示法的起始数字。如果有多个表示方案,选择起始数字小的方案。
比如:
2^3 = 8 = 3 + 5
3^3 = 27 = 7 + 9 + 11
4^3 = 64 = 1 + 3 + ... + 15
虽然他没有想出怎么证明,但他想通过计算机进行验证。
请你帮助小明写出 111 的立方之连续奇数和表示法的起始数字。如果有多个表示方案,选择起始数字小的方案。
注意:只提交一个整数,不要写其它附加内容,比如:说明性的文字。
#include <iostream>
using namespace std;
int main()
{
int n=111;
int nnn=n*n*n;
int sum=0;
int flag=0;
for(int i=1;i<nnn;i=i+2)
{
sum=i;
for(int j=i+2;j<nnn;j=j+2)
{
sum=sum+j;
if(sum>nnn)
break;
if(sum==nnn)
{
cout<<i;
flag=1;
break;
}
}
if(flag==1)
break;
}
return 0;
}
using namespace std;
int main()
{
int n=111;
int nnn=n*n*n;
int sum=0;
int flag=0;
for(int i=1;i<nnn;i=i+2)
{
sum=i;
for(int j=i+2;j<nnn;j=j+2)
{
sum=sum+j;
if(sum>nnn)
break;
if(sum==nnn)
{
cout<<i;
flag=1;
break;
}
}
if(flag==1)
break;
}
return 0;
}
Problem Description
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector <int> a;
int num=5123123;
for(int i=0;i<100000;i++)
{
int temp=num;
num=0;
while(temp>0)
{
int k=temp%10;
num=num+k*k;
temp=temp/10;
}
a.push_back(num);
}
sort(a.rbegin(),a.rend());
cout<<a[0];
return 0;
}
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector <int> a;
int num=5123123;
for(int i=0;i<100000;i++)
{
int temp=num;
num=0;
while(temp>0)
{
int k=temp%10;
num=num+k*k;
temp=temp/10;
}
a.push_back(num);
}
sort(a.rbegin(),a.rend());
cout<<a[0];
return 0;
}
填数游戏
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 9 Accepted Submission(s) : 7
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
如图(见QQ群)所示六角形中,填入1~12的数字。 使得每条直线上的数字之和都相同。
图中已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
图中已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
#include<stdio.h>
#include<string.h>
int t[6];
int num[12];
void dfs(int cur){
t[0]=num[1]+num[4]+num[7]+num[9];
t[1]=num[2]+num[5]+num[4]+num[6];
t[2]=num[1]+num[5]+num[8]+num[12];
t[3]=num[6]+num[8]+num[11]+num[3];
t[4]=num[9]+num[10]+num[11]+num[12];
t[5]=num[2]+num[7]+num[10]+num[3];
//恰好放置12个数字,+1为13
if(cur==13){
//六个边的和恰好相同
if(t[0]==t[1] && t[1]==t[2] && t[2]==t[3] && t[3]==t[4] && t[4]==t[5] &&t[5]==t[0])
//打印结果
for(int f=1;f<=12;f++)
printf("%d ",num[f]);
}
//否则继续放置数字,从1开始逐个放置
else for(int i=1;i<=12;i++){
//标记变量
int ok=1;
for(int j=1;j<cur;j++){
//检查当前放置的数字是否在此之前放置过
if(num[j]==i)
ok=0; //如果放置过标记变量为0
}
if(ok){
//放置该数字
num[cur]=i;
//进行下一步搜索
dfs(cur+1);
}
}
}
int main(){
num[1]=1;num[2]=8;num[3]=3;
dfs(4);
return 0;
}
#include<string.h>
int t[6];
int num[12];
void dfs(int cur){
t[0]=num[1]+num[4]+num[7]+num[9];
t[1]=num[2]+num[5]+num[4]+num[6];
t[2]=num[1]+num[5]+num[8]+num[12];
t[3]=num[6]+num[8]+num[11]+num[3];
t[4]=num[9]+num[10]+num[11]+num[12];
t[5]=num[2]+num[7]+num[10]+num[3];
//恰好放置12个数字,+1为13
if(cur==13){
//六个边的和恰好相同
if(t[0]==t[1] && t[1]==t[2] && t[2]==t[3] && t[3]==t[4] && t[4]==t[5] &&t[5]==t[0])
//打印结果
for(int f=1;f<=12;f++)
printf("%d ",num[f]);
}
//否则继续放置数字,从1开始逐个放置
else for(int i=1;i<=12;i++){
//标记变量
int ok=1;
for(int j=1;j<cur;j++){
//检查当前放置的数字是否在此之前放置过
if(num[j]==i)
ok=0; //如果放置过标记变量为0
}
if(ok){
//放置该数字
num[cur]=i;
//进行下一步搜索
dfs(cur+1);
}
}
}
int main(){
num[1]=1;num[2]=8;num[3]=3;
dfs(4);
return 0;
}
Problem Description
A 村的元宵节灯会上有一迷题:
请猜谜 * 请猜谜 = 请边赏灯边猜
小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。
请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可。
注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字。
请猜谜 * 请猜谜 = 请边赏灯边猜
小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。
请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可。
注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字。
#include<iostream>
using namespace std;
using namespace std;
void find()
{
for(int q = 0;q <= 9;q++)
for(int c = 0;c <= 9;c++)
for(int m = 0;m <= 9;m++)
for(int b = 0;b <= 9;b++)
for(int s = 0;s <= 9;s++)
for(int d = 0;d <= 9;d++)
{
int cc[10] = {0};
cc[q]++;
cc[c]++;
cc[m]++;
cc[b]++;
cc[s]++;
cc[d]++;
if(cc[q]==1 && cc[c]==1 && cc[m]==1 && cc[b]==1 && cc[s]==1 && cc[d]==1 )
{
int qcm = q*100 + c*10 + m;
int qbsdbc = q*100000 + b*10000 + s*1000 + d*100 + b*10 + c;
if(qcm*qcm == qbsdbc)
{
cout<<qcm;
}
}
}
}
{
for(int q = 0;q <= 9;q++)
for(int c = 0;c <= 9;c++)
for(int m = 0;m <= 9;m++)
for(int b = 0;b <= 9;b++)
for(int s = 0;s <= 9;s++)
for(int d = 0;d <= 9;d++)
{
int cc[10] = {0};
cc[q]++;
cc[c]++;
cc[m]++;
cc[b]++;
cc[s]++;
cc[d]++;
if(cc[q]==1 && cc[c]==1 && cc[m]==1 && cc[b]==1 && cc[s]==1 && cc[d]==1 )
{
int qcm = q*100 + c*10 + m;
int qbsdbc = q*100000 + b*10000 + s*1000 + d*100 + b*10 + c;
if(qcm*qcm == qbsdbc)
{
cout<<qcm;
}
}
}
}
int main()
{
find();
return 0;
}
{
find();
return 0;
}
Problem Description
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
#include <iostream>
using namespace std;
int a[4];
bool check()
{
if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3])
return true;
else
return false;
}
using namespace std;
int a[4];
bool check()
{
if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3])
return true;
else
return false;
}
int main()
{
int count=0;
int count2=0;
for(int i=1000;i<10000;i++)
{
int temp=i;
for(int j=0;j<4;j++)
{
a[j]=temp%10;
temp=temp/10;
}
if(check()==true)
{
for(int m=0;m<4;m++)
{
for(int n=0;n<4;n++)
{
if(m==n)continue;
for(int k=0;k<4;k++)
{
if(k==m||k==n)continue;
for(int l=0;l<4;l++)
{
if(l==m||l==n||l==k)continue;
if(a[m]*(a[n]*100+a[k]*10+a[l])==i)
count++;
if((a[m]*10+a[n])*(a[k]*10+a[l])==i)
count2++;
}
}
}
}
}
}
// cout<<count<<endl;
// cout<<count2/2<<endl;
count=count+count2/2;
cout<<count;
return 0;
}
{
int count=0;
int count2=0;
for(int i=1000;i<10000;i++)
{
int temp=i;
for(int j=0;j<4;j++)
{
a[j]=temp%10;
temp=temp/10;
}
if(check()==true)
{
for(int m=0;m<4;m++)
{
for(int n=0;n<4;n++)
{
if(m==n)continue;
for(int k=0;k<4;k++)
{
if(k==m||k==n)continue;
for(int l=0;l<4;l++)
{
if(l==m||l==n||l==k)continue;
if(a[m]*(a[n]*100+a[k]*10+a[l])==i)
count++;
if((a[m]*10+a[n])*(a[k]*10+a[l])==i)
count2++;
}
}
}
}
}
}
// cout<<count<<endl;
// cout<<count2/2<<endl;
count=count+count2/2;
cout<<count;
return 0;
}
Problem Description
小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。
其标价都是4位数字(即千元不等)。
小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了(图形不能上传,请参见QQ群)。
其标价都是4位数字(即千元不等)。
小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了(图形不能上传,请参见QQ群)。
这种价牌有个特点,对一些数字,倒过来看也是合理的数字。如:1 2 5 6 8 9 0 都可以。这样一来,如果牌子挂倒了,有可能完全变成了另一个价格,比如:1958 倒着挂就是:8561,差了几千元啊!!
当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。
有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。
请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?
答案是一个4位的整数。
注意:不要提交解答过程,或其它辅助说明类的内容。
当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。
有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。
请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?
答案是一个4位的整数。
注意:不要提交解答过程,或其它辅助说明类的内容。
#include <iostream>
using namespace std;
int nums[7]={1,2,5,6,8,9,0};
using namespace std;
int nums[7]={1,2,5,6,8,9,0};
int turn(int m)
{
if(m==6)
return 9;
else if(m==9)
return 6;
else
return m;
}
{
if(m==6)
return 9;
else if(m==9)
return 6;
else
return m;
}
int change(int m)
{
int result=0;
int temp=m;
while(temp>0)
{
int k=temp%10;
result=result*10+k;
temp=temp/10;
}
return result;
}
{
int result=0;
int temp=m;
while(temp>0)
{
int k=temp%10;
result=result*10+k;
temp=temp/10;
}
return result;
}
int main()
{
int flag=0;
for(int a=0;a<6;a++)
{
if(flag==1)
{
break;
}
for(int b=0;b<7;b++)
{
if(flag==1)
{
break;
}
for(int c=0;c<7;c++)
{
if(flag==1)
{
break;
}
for(int d=0;d<7;d++)
{
if(flag==1)
{
break;
}
for(int e=0;e<6;e++)
{
if(flag==1)
{
break;
}
for(int f=0;f<7;f++)
{
if(flag==1)
{
break;
}
for(int g=0;g<7;g++)
{
if(flag==1)
{
break;
}
for(int h=0;h<7;h++)
{
int A=nums[a];
int B=nums[b];
int C=nums[c];
int D=nums[d];
int E=nums[e];
int F=nums[f];
int G=nums[g];
int H=nums[h];
int num1=A*1000+B*100+C*10+D;
int num2=E*1000+F*100+G*10+H;
A=turn(nums[a]);
B=turn(nums[b]);
C=turn(nums[c]);
D=turn(nums[d]);
E=turn(nums[e]);
F=turn(nums[f]);
G=turn(nums[g]);
H=turn(nums[h]);
int num1_c=A*1000+B*100+C*10+D;
int num2_c=E*1000+F*100+G*10+H;
num1_c=change(num1_c);
num2_c=change(num2_c);
int cha=num2_c+num1_c-num1-num2;
if(num1-num1_c>200&&num1-num1_c<300&&num2_c-num2>800&&num2_c-num2<900&&cha==558)
{
cout<<num1;
flag=1;
break;
}
}
}
}
}
}
}
}
}
return 0;
}
{
int flag=0;
for(int a=0;a<6;a++)
{
if(flag==1)
{
break;
}
for(int b=0;b<7;b++)
{
if(flag==1)
{
break;
}
for(int c=0;c<7;c++)
{
if(flag==1)
{
break;
}
for(int d=0;d<7;d++)
{
if(flag==1)
{
break;
}
for(int e=0;e<6;e++)
{
if(flag==1)
{
break;
}
for(int f=0;f<7;f++)
{
if(flag==1)
{
break;
}
for(int g=0;g<7;g++)
{
if(flag==1)
{
break;
}
for(int h=0;h<7;h++)
{
int A=nums[a];
int B=nums[b];
int C=nums[c];
int D=nums[d];
int E=nums[e];
int F=nums[f];
int G=nums[g];
int H=nums[h];
int num1=A*1000+B*100+C*10+D;
int num2=E*1000+F*100+G*10+H;
A=turn(nums[a]);
B=turn(nums[b]);
C=turn(nums[c]);
D=turn(nums[d]);
E=turn(nums[e]);
F=turn(nums[f]);
G=turn(nums[g]);
H=turn(nums[h]);
int num1_c=A*1000+B*100+C*10+D;
int num2_c=E*1000+F*100+G*10+H;
num1_c=change(num1_c);
num2_c=change(num2_c);
int cha=num2_c+num1_c-num1-num2;
if(num1-num1_c>200&&num1-num1_c<300&&num2_c-num2>800&&num2_c-num2<900&&cha==558)
{
cout<<num1;
flag=1;
break;
}
}
}
}
}
}
}
}
}
return 0;
}