仅仅有答案。。。。。将就着看吧 近期没时间写解题报告。
。。。
至于为什么没有第7题 。
。由于我不会啊。
。。。
1
一个串的子串是指该串的一个连续的局部。
假设不要求连续,则可称为它的子序列。
比方对串: “abcdefg” 而言,”ab”,”abd”,”bdef” 等都是它的子序列。
特别地,一个串本身。以及空串也是它的子序列。
对两个串而言,能够有很多的共同的子序列,我们关心的是:它们所共有的长度最大的子序列是多长。下面代码实现了这个问题的求解。请填写划线部分缺失的代码。
注意:仅仅填写划线部分缺少的内容。不要填写不论什么多余的符号或凝视、说明等。
比如,不要填写已经给出的小括号。
// tag==1 && *p!=' '
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
int get_word_num(char* buf)
{
int n=0;
int tag=1;
char* p=buf;
for( ; *p!=0&&*p!=13&&*p!=10; p++)
{
if(*p==' ' && tag==0)
tag=1;
if( tag==1 && *p!=' ' )
{
n++;
tag=0;
}
}
return n;
}
int main()
{
char buf[1000];
fgets(buf,1000,stdin);
printf("%d
", get_word_num(buf));
return 0;
}
2
1/1 + 1/2 + 1/3 + 1/4 + … 在数学上称为调和级数。
它是发散的。也就是说,仅仅要加上足够多的项,就能够得到随意大的数字。
可是,它发散的非常慢:
前1项和达到 1.0
前4项和才超过 2.0
前83项的和才超过 5.0
那么。请你计算一下,要加多少项,才干使得和达到或超过 15.0 呢?
请填写这个整数。
注意:仅仅须要填写一个整数。不要填写不论什么多余的内容。
比方说明文字。
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <string.h>
#define C 0.57721566490153286060651209
using namespace std;
int main()
{
double sum=0;
int flag=0;
for(int n=1000000; n<10000000; n++)
{
if(log(n)+C>=15)
{
printf("%d
",n);
break;
}
}
return 0;
}
//----------------- 正常解法
#include<stdio.h>
int main()
{
int n,k;
double sum=0;
for(int i=1; i<10000000000000; i++)
{
double m=double((1000000000000000000.0/i));
sum+=m;
// printf("i=%d m=%d sum=%d
",i,m,sum);
if(sum>=15000000000000000000)
{
printf("i=%d sum=%d",i,sum);
break;
}
}
return 0;
}
3
假设x的x次幂结果为10(參见【图1.png】)。你能计算出x的近似值吗?
显然,这个值是介于2和3之间的一个数字。
请把x的值计算到小数后6位(四舍五入)。并填写这个小数值。
注意:仅仅填写一个小数。不要写不论什么多余的符号或说明。
//手动二分
#include <stdio.h>
#include <math.h>
int main()
{
double x=2.506184;
double x10=pow(x,x);
printf("%.10lf
",x10);
return 0;
}
//暴力
#include <stdio.h>
#include <math.h>
int main()
{
// double x=2.506184;
double x10;double x;
for(x=2.000000;x<3;x+=0.0000001)
{
x10=pow(x,x);
if(x10>=10)
break;
}
printf("%.10lf
",x);
return 0;
}
4
今有7对数字:两个1,两个2,两个3。…两个7,把它们排成一行。
要求,两个1间有1个其他数字,两个2间有2个其他数字,以此类推,两个7之间有7个其他数字。
例如以下就是一个符合要求的排列:
17126425374635
当然,假设把它倒过来,也是符合要求的。
请你找出还有一种符合要求的排列法,而且这个排列法是以74开头的。
注意:仅仅填写这个14位的整数,不能填写不论什么多余的内容,比方说明凝视等。
#include <stdio.h>
int a[15];
int b[8];
void judge()
{
for(int i=1; i<15; i++)
printf("%d",a[i]);
printf("+++++
");
}
void dfs(int n)
{
//еп╤о
/*
for(int i=1; i<15; i++)
printf("%d",a[i]);
printf(" ");
for(int i=1; i<8; i++)
printf("%d",b[i]);
printf("
");
*/
if(n>14)
{
judge();
return ;
}
if(a[n])
{
dfs(n+1);
return;
}
int sum=0;
for(int i=1; i<7; i++)
{
if(b[i])
sum+=i;
}
if(sum==21)
{
judge();
return ;
}
for(int i=1; i<7; i++)
{
if(b[i]||a[n+1+i]||n+1+i>14||i==4)
continue;
if(a[n])
{
i--;
continue;
}
a[n]=i;
a[n+i+1]=i;
b[i]=1;
dfs(n+1);
a[n]=0;
a[n+i+1]=0;
b[i]=0;
}
}
int main()
{
a[1]=7,a[2]=4,a[7]=4,a[9]=7;
b[7]=1,b[4]=1;
dfs(3);
// judge();
int s;
scanf("%d",&s);
return 0;
}
5
勾股定理。西方称为毕达哥拉斯定理。它所相应的三角形如今称为:直角三角形。
已知直角三角形的斜边是某个整数。而且要求另外两条边也必须是整数。
求满足这个条件的不同直角三角形的个数。
【数据格式】
输入一个整数 n (0 < n < 10000000) 表示直角三角形斜边的长度。
要求输出一个整数,表示满足条件的直角三角形个数。
比如,输入:
5
程序应该输出:
1
再比如,输入:
100
程序应该输出:
2
再比如,输入:
3
程序应该输出:
0
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出。不要画蛇添足地打印相似:“请您输入…” 的多余内容。
全部代码放在同一个源文件里。调试通过后。拷贝提交该源代码。
注意: main函数须要返回0
注意: 仅仅使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 全部依赖的函数必须明白地在源文件里 #include , 不能通过project设置而省略经常使用头文件。
提交时,注意选择所期望的编译器类型。
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
int main()
{
int n,sum;
cin>>n;
sum=0;
double other;
for(int i=1; i<n; i++)
{
other=n*n-i*i;
if(sqrt(other)==(int)sqrt(other))
sum++;
}
cout<<sum/2<<endl;
return 0;
}
6
你一定听说过“数独”游戏。
如【图1.png】。玩家须要依据9×9盘面上的已知数字,推理出全部剩余空格的数字,并满足每一行、每一列、每个同色九宫内的数字均含1-9。不反复。
数独的答案都是唯一的,所以,多个解也称为无解。
本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。
本题的要求就是输入数独题目,程序输出数独的唯一解。
我们保证全部已知数据的格式都是合法的。而且题目有唯一的解。
格式要求:
输入9行,每行9个数字。0代表未知。其他数字为已知。
输出9行,每行9个数字表示数独的解。
比如:
输入(即图中题目):
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700
程序应该输出:
145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764
再比如,输入:
800000000
003600000
070090200
050007000
000045700
000100030
001000068
008500010
090000400
程序应该输出:
812753649
943682175
675491283
154237896
369845721
287169534
521974368
438526917
796318452
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 2000ms
请严格按要求输出,不要画蛇添足地打印相似:“请您输入…” 的多余内容。
全部代码放在同一个源文件里,调试通过后。拷贝提交该源代码。
注意: main函数须要返回0
注意: 仅仅使用ANSI C/ANSI C++ 标准。不要调用依赖于编译环境或操作系统的特殊函数。
注意: 全部依赖的函数必须明白地在源文件里 #include , 不能通过project设置而省略经常使用头文件。
提交时,注意选择所期望的编译器类型。
#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstring>
using namespace std;
char a[20][20],f=0;
int judge(int x,int y)
{
//推断横竖有没有重的
for(int i=1; i<10; i++)
{
if(i!=y&&a[x][i]==a[x][y]||i!=x&&a[i][y]==a[x][y])
return 0;
}
//推断小九宫格里有没有重的
int xx,yy;
if(x>=1&&x<=3)
xx=1;
else if(x>=4&&x<=6)
xx=4;
else if(x>=7&&x<=9)
xx=7;
if(y>=1&&y<=3)
yy=1;
else if(y>=4&&y<=6)
yy=4;
else if(y>=7&&y<=9)
yy=7;
int xxx=xx+3,yyy=yy+3;
for(int i=xx; i<xxx; i++)
{
for(int j=yy; j<yyy; j++)
{
if(a[i][j]==a[x][y])
if(i!=x&&j!=y)
return 0;
}
}
return 1;
}
void output()
{
for(int i=1; i<=9; i++)
{
puts(a[i]+1);
}
return ;
}
void dfs(int x,int y)
{
if(f==1)
return;
if(x==9&&y==9)//到头了 要跳回去
{
output();
f=1;
return ;
}
for(int i=x; i<10; i++)
{
for(int j=1; j<10; j++)
{
if(a[i][j]!='0')
{
if(i==9&&j==9)
{
output();
f=1;
return ;
}
continue;
}
for(int k=1; k<10; k++)
{
a[i][j]=k+'0';
if(judge(i,j))
dfs(i,j);
a[i][j]='0';
if(i==9&&j==9)//到头了 要跳回去
{
output();
f=1;
return ;
}
if(k==9)
return ;
}
}
}
}
int main()
{
// freopen("in.txt", "r", stdin);
// freopen("outt.txt", "w", stdout);
for(int j=1; j<=9; j++)
{
gets(a[j]+1);
}
dfs(1,1);
return 0;
}