南阳理工ACM975--关于521

http://acm.nyist.net/JudgeOnline/problem.php?pid=975

这是我的源码。一直超时,一直超时。

还有itoa函数函数的使用。可以改成sprintf(str, " %d" , num);

但是杭电的ACM complier不接受itoa函数,原因是itoa是c++的扩展函数,当然不能指望任何编译器都可以编译了~~

注:

课件内容:

itoa不是ansi函数, 能将整数转换为字符串而且与ANSI标准兼容的方法是使用sprintf()函数

int num = 100;

char str[25];

sprintf(str, " %d" , num);

<span style="font-size:14px;">#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int a[1000010];
char c[11];
int main()
{
	int i,j,m,n;
	int k,x,y;
	memset(a,0,sizeof(a));
	for(i=0;i<1000001;i++)
	{
		sprintf(c,"%d",i);
		if (strstr(c,"521")!=NULL)
			a[i]++;
		if (strstr(c,"1")!=NULL&&strstr(c,"2")!=NULL&&strstr(c,"5")!=NULL)
			a[i]++;
	}
	k = 1;
	/*for (i=510;i<522;i++)
	printf("%d\n",a[i]);*/
	while (scanf("%d%d",&m,&n)!=EOF&&(m!=0||n!=0))
	{
		y = 0;x = 0;
		for (j=m;j<=n;j++)
		{
			if (1==a[j])
				x++;
			if (2==a[j])
			{
				y++;
				x++;
			}
		}
		printf("Case %d:%d %d\n",k,x,y);
		k++;
	}
	return 0;
}</span>

后才才知道。我代码中的第二次循环是导致代码超时的缘故。让我纠结好久!!!

<span style="font-size:14px;">
#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int a[2][1000001]={0};
char c[11];
int main()
{
	int i,j,m,n;
	int k;
	int w = 0,p = 0;
	memset(a,0,sizeof(a));
	for(i=0;i<1000001;i++)
	{
		sprintf(c,"%d",i);
		if (strstr(c,"1")!=NULL&&strstr(c,"2")!=NULL&&strstr(c,"5")!=NULL)
		{
			w++;
			if (strstr(c,"521")!=NULL)
			p++;

		}
		a[0][i]+=w;
		a[1][i]+=p;
	}
	k = 1;
	/*for (i=510;i<522;i++)
	printf("%d\n",a[i]);*/
	while (scanf("%d%d",&n,&m)!=EOF&&(m!=0||n!=0))
	{
		printf("Case %d:%d %d\n",k,a[0][m]-a[0][n-1],a[1][m]-a[1][n-1]);
		k++;
	}
	return 0;
}        </span>
时间: 2024-11-02 14:52:01

南阳理工ACM975--关于521的相关文章

南阳理工 题目9:posters(离散化+线段树)

posters 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述 The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally deci

南阳理工另一种阶乘问题

#include<stdio.h>int main(){  int n,m;  int sum,i;  int a[21];  int t=1,t1=1;  for(i=1;i<21;i=i+2)  {   a[i]=t*t1;   a[i+1]=a[i];   t=t1*t;   t1=t1+2;  }  scanf("%d",&n);  while(n--)  {   sum=0;   scanf("%d",&m);   for

南阳理工acm 1

C++版: #include<iostream> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a+b<<endl; } 南阳理工acm 1,布布扣,bubuko.com

南阳理工--韩信点兵

#include<stdio.h>int main(){  int a,b,c;  int x;  scanf("%d%d%d",&a,&b,&c);  for(x=10;x<=100;x++)  {   if(x%3==a&&x%5==b&&x%7==c)   {    printf("%d\n",x);    break;   }  }  if(x>100)  {   printf(

(c++实现)南阳理工acm 题目117 求逆序数

求逆序数 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 现在,给你一个N个元素的序列,请你判断出它的逆序数是多少. 比如 1 3 2 的逆序数就是1. 输入 第一行输入一个整数T表示测试数据的组数(1<=T<=5) 每组测试数据的每一行是一个整数N表示数列中共有N个元素(2〈=N〈=1000000) 随后的一行共有N个整

南阳理工----奋斗的小蜗牛

#include<stdio.h>#include<math.h>int main(){  int t,h;  int n;  double n1;  scanf("%d",&t);  while(t--)  {   n=0;    scanf("%d",&h);    if(h<=10)    printf("%d\n",n+1);   if(h>10)    {  n1=(h-10)/5.0

南阳理工---题目975关于521

关于521 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去. 浏览网页的流年忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫,因为每个男生都会不经意的成为浪漫的制造者.此后,流年走到哪里都能看到5.2.1三个数字,他怒了,现在他想知道在连续的数中有多少数全部包含了这三个数字.例如12356就算一个,而5111就不算.特别的,如果他看到了521三个数连续出现,会特别的愤怒.例如3521

南阳理工ACM111

分数加减法 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 编写一个C程序,实现两个分数的加减法 输入 输入包含多行数据 每行数据是一个字符串,格式是"a/boc/d". 其中a, b, c, d是一个0-9的整数.o是运算符"+"或者"-". 数据以EOF结束 输入数据保证合法 输出 对于输入数据的每一行输出两个分数的运算结果. 注意结果应符合书写习惯,没有多余的符号.分子.分母,并且化简至最简分数 样例输入 1/

南阳理工60---谁获得了最高奖学金

描述    某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得: 2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得: 3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得: 4) 西部奖学金,每人1000元,期末平均成绩高于85分