1.蜗牛
(puz.pas/c/cpp)
【问题描述】
在一口井里,有一只神牛(其实是蜗牛),它打算从井底爬到地面上。已知井的深度为V米,蜗牛每天白天可以往上爬A米,可是每天晚上睡觉的时候,它会杯具地向下滑落B米。
求蜗牛需要多少天才能爬出井。
【输入】
包括三个由空格分开的数字:A,B和V
其中(1≤B<A≤V≤1 000 000 000)。 (p.s:注意数据范围)
【输出】
一个整数,计算蜗牛爬上木杆需要的天数。
【输入输出样例1】
puz.in |
puz.out |
5 1 6 |
2 |
【输入输出样例2】
puz.in |
puz.out |
6 1 6 |
1 |
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
int a,b,v,tian=0,sum=0;
freopen("puz.in","r",stdin);
freopen("puz.out","w",stdout);
cin>>a>>b>>v;
for(int i=1;;i++)
{
sum=sum+a;
tian++;
if(sum>=v)
break;
sum=sum-b;
}
cout<<tian<<endl;
return 0;
}
以上为超时代吗。。
正解:
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
int a,b,v,tian=0,sum=0;
/*freopen("puz.in","r",stdin);
freopen("puz.out","w",stdout);*/
cin>>a>>b>>v;
if(a>=v)cout<<"1"<<endl;
if(a<v)
{
if((v-a)%(a-b)==0)
cout<<(v-a)/(a-b)+1<<endl;
else
cout<<(v-a)/(a-b)+2<<endl;
}
return 0;
}
2.又是图形输出
(picture.pas/c/cpp)
【问题描述】
热衷图形输出的XW老师对于OJ上的图形输出题很不满意,认为难度太低,所以他亲自设计了此题来考验大家(╯﹏╰)。为了可以输出更大的图形,同时保证美观性,XW老师决定当输出的数字大于9的时候用小写字母进行代替(a代替10,b代替11,往后依次)。
【输入】
一个整数 N(1 ≤ N ≤ 35)
【输出】
一个所谓菱形。具体看样例。
【输入输出样例1】
picture.in |
picture.out |
4 |
第一行和最后一行中间都有一个空格。
【输入输出样例2】
picture.in |
picture.out |
11 |
【数据范围】
70%的数据满足 1 ≤ N ≤ 9;
100%的数据满足 1 ≤ N ≤ 35
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
freopen("picture.in","r",stdin);
freopen("picture.out","w",stdout);
int n,a,b=1,c;
char ch;
cin>>n;
a=n;
for(int i=1;i<=n;i++)
{
if(i>=10)
{
ch='a'+i-10;
}
c=i;
for(int j=1;j<=a;j++)
{
if(i<=9)
cout<<c;
if(i>9)
cout<<ch;
}
for(int j=1;j<=b;j++)
{
cout<<" ";
}
b=b+2;
for(int j=1;j<=a;j++)
{
if(i<=9)
cout<<c;
if(i>9)
cout<<ch;
}
a--;
cout<<endl;
}
a=a+2;
b=b-4;
for(int i=n-1;i>0;i--)
{
if(i>=10)
{
ch='a'+i-10;
}
c=i;
for(int j=1;j<=a;j++)
{
if(i<=9)
cout<<c;
if(i>9)
cout<<ch;
}
for(int j=1;j<=b;j++)
{
cout<<" ";
}
b=b-2;
for(int j=1;j<=a;j++)
{
if(i<=9)
cout<<c;
if(i>9)
cout<<ch;
}
a++;
cout<<endl;
}
return 0;
}
3、回文素数
(prime.pas/c/cpp)
总时间限制:
5000ms
内存限制:
65536kB
描述
一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121,1221,15651都是回文数。给定位数n,找出所有既是回文数又是素数的n位十进制数。(注:不考虑超过整型数范围的情况)。
输入
位数n,其中1<=n<=9。
输出
第一行输出满足条件的素数个数。
第二行按照从小到大的顺序输出所有满足条件的素数,两个数之间用一个空格区分。
样例输入
1
样例输出
4
2 3 5 7
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=233333;
long long n,sum=0,b=1,c,d=0,e,f,g,y,x;
int a[maxn],z[maxn];
bool test(int num)
{
for(int i=2;i*i<=num;i++)
if(num%i==0)
return 0;
return 1;
}
int main()
{
freopen("prime.in","r",stdin);
freopen("prime.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
b=10*b;
c=b/10+1;
for(int i=c;i<=b;i++)
{
if(i%10==i*10/b)
{
if(test(i))
{
d++;
a[d]=i;
}
}
}
for(int i=1;i<=d;i++)
{
g=0;
e=a[i];
for(;e>0;)
{
f=e%10;
g=g*10+f;
e=e/10;
}
if(g==a[i])
{
sum++;
z[sum]=a[i];
}
}
cout<<sum<<endl;
for(int i=1;i<=sum;i++)
cout<<z[i]<<" ";
return 0;
}
由于,知识不够,在n=8,9时 。。超时。。
待我学习了递归 我将不再超时!!!!!