1.网友年龄
某君新认识一网友。
当问及年龄时,他的网友说:
“我的年龄是个2位数,我比儿子大27岁,
如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:网友的年龄一共有多少种可能情况?
提示:30岁就是其中一种可能哦.
请填写表示可能情况的种数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
-
(7)
#include <stdio.h>
main()
{
int i,ans=0;
for(i=10;i<100;i++)
if((i-27)==((i%10)*10+i/10))
{
ans++;
printf("%d\n",i);
}
printf("%d",ans);
return 0;
}
2.生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
-
(26)
#include <stdio.h>
main()
{
int i,j;
for(i=0;i<100;i++)
for(j=i;j<100;j++)
{
if((i+j)*(j-i+1)/2==236)
printf("%d\n",i);
}
return 0;
}
3.方格填数
如下的10个格子
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
-
(1580)
//暴力求解法,直接用全排列把所有可能理出来判断
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int ans=0;
int a[10]={0,1,2,3,4,5,6,7,8,9};
do{
if(a[1]!=a[0]+1&&a[1]!=a[0]-1&&a[3]!=a[0]+1&&a[3]!=a[0]-1&&a[4]!=a[0]+1&&a[4]!=a[0]-1&&a[5]!=a[0]+1&&a[5]!=a[0]-1&&
a[2]!=a[1]+1&&a[2]!=a[1]-1&&a[4]!=a[1]+1&&a[4]!=a[1]-1&&a[5]!=a[1]+1&&a[5]!=a[1]-1&&a[6]!=a[1]+1&&a[6]!=a[1]-1&&
a[5]!=a[2]+1&&a[5]!=a[2]-1&&a[6]!=a[2]+1&&a[6]!=a[2]-1&&
a[4]!=a[3]+1&&a[4]!=a[3]-1&&a[7]!=a[3]+1&&a[7]!=a[3]-1&&a[8]!=a[3]+1&&a[8]!=a[3]-1&&
a[5]!=a[4]+1&&a[5]!=a[4]-1&&a[7]!=a[4]+1&&a[7]!=a[4]-1&&a[8]!=a[4]+1&&a[8]!=a[4]-1&&a[9]!=a[4]+1&&a[9]!=a[4]-1&&
a[6]!=a[5]+1&&a[6]!=a[5]-1&&a[8]!=a[5]+1&&a[8]!=a[5]-1&&a[9]!=a[5]+1&&a[9]!=a[5]-1&&
a[9]!=a[6]+1&&a[9]!=a[6]-1&&
a[8]!=a[7]+1&&a[8]!=a[7]-1&&
a[9]!=a[8]+1&&a[9]!=a[8]-1 )
ans++;
else continue;
}while(next_permutation(a,a+10));
cout<<ans;
}
4.寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图1.jpg】)
每个方块代表1~13中的某一个数字,但不能重复。
比如:
6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
以及:
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
//同3,暴力求解法,直接用全排列把所有可能理出来判断
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int ans=0;
int a[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};
do{
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[9]%a[10]==0) ){
//注意第四个式子的判断条件
cout<<a[0]<<"+"<<a[1]<<"="<<a[2]<<endl;
cout<<a[3]<<"-"<<a[4]<<"="<<a[5]<<endl;
cout<<a[6]<<"*"<<a[7]<<"="<<a[8]<<endl;
cout<<a[9]<<"/"<<a[10]<<"="<<a[11]<<endl;
cout<<endl; //输出验证一下
ans++;
}
else continue;
}while(next_permutation(a,a+13));
cout<<ans;
}
8. 四平方和
四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多4个正整数的平方和。
如果把0包括进去,就正好可以表示为4个数的平方和。
比如:
5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2
(^符号表示乘方的意思)
对于一个给定的正整数,可能存在多种平方和的表示法。
要求你对4个数排序:
0 <= a <= b <= c <= d
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法
程序输入为一个正整数N (N<5000000)
要求输出4个非负整数,按从小到大排序,中间用空格分开
例如,输入:
5
则程序应该输出:
0 0 1 2
再例如,输入:
12
则程序应该输出:
0 2 2 2
再例如,输入:
773535
则程序应该输出:
1 1 267 838
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 3000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
//减少循环数以减少耗时
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main(){
int N;
int a[4]={0,0,0,0};
scanf("%d",&N);
for(int i=0;i*i<N;i++){
for(int j=i;j*j<N;j++){
for(int k=j;k*k<N;k++){
int num = i*i+j*j+k*k;
double M = N - num;
if((sqrt(M)-int(sqrt(M))== 0)&&(sqrt(M)>k)){
cout<<i<<" "<<j<<" "<<k<<" "<<sqrt(M);
return 0;
}
}
}
}
return 0;
}
9.密码脱落
X星球的考古学家发现了一批古代留下来的密码。
这些密码是由A、B、C、D 四种植物的种子串成的序列。
仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。
由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。
你的任务是:
给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。
输入一行,表示现在看到的密码串(长度不大于1000)
要求输出一个正整数,表示至少脱落了多少个种子。
例如,输入:
ABCBA
则程序应该输出:
0
再例如,输入:
ABDCDCBABC
则程序应该输出:
3
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
//对于较大的字符串可能会超时
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char s[1000];
char *rev(char *s) {
int len = strlen(s);//sizeof(s) / sizeof(char);
char *ans = (char*)malloc(len* sizeof(char));//(char *) malloc(sizeof(s));
for (int i = 0; i < len; ++i) {
ans[i] = s[len - 1 - i];
}
return ans;
}
int lcs(const char *s1, const char *s2,int len) {
int dp[len][len];
for (int i = 0; i < len; ++i) {
if(s1[i]==s2[0])dp[0][i]=1;
else dp[0][i]=(i==0?0:dp[0][i-1]);
}
for (int j = 0; j < len; ++j) {
if(s2[j]==s1[0])dp[j][0]=1;
else dp[j][0]= (j==0 ? 0:dp[j-1][0]);
}
for (int i = 1; i < len; ++i) {
for (int j = 1; j < len; ++j) {
if(s2[i]==s1[j])dp[i][j]= dp[i-1][j-1]+1;
else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
return dp[len-1][len-1];
}
int main(int argc, const char *argv[]) {
// cout<<lcs("ABDCDCBABC",rev("ABDCDCBABC"),10)<<endl;
freopen("/Users/zhengwei/CLionProjects/lanqiaobei2019/2016_C_A/data9/in2.txt","r",stdin);
scanf("%s", &s);
int len = strlen(s);
int l = lcs(s, rev(s),len);
printf("%d",len-l);
return 0;
}