这篇题解有啥问题
  • 板块灌水区
  • 楼主return_second
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/25 20:24
  • 上次更新2024/12/26 12:31:15
查看原帖
这篇题解有啥问题
1047309
return_second楼主2024/12/25 20:24

rt,我的题解审核没通过,打回原因是:

【中文标点符号】与【英文、数字、公式或汉字】或【汉字】与【汉字】之间不应添加多余空格。

源码:

关于铜组 T1 卡了我 2h+ 这件事……

# 思路

## 28 分思路

28 分的思路很简单,写两个函数分别表示四舍五入和链式舍入的结果,最后比较即可,不过细节比较多。代码就不给了。

## 49 分思路

用数组 $ans$ 来存储最后的结果,在输入 $n$ 前预处理一下。$ans_i$ 表示当题目给定的 $n$ 为 $i$ 时的结果,实现类似于前缀和。其实只要能搞定前面的代码,这个也不难。

## 100 分思路

我们先把刚才的数组输出一下,就会发现答案其实是会在 **一段数字中不断累加,然后停止一段,再累加一段……** 而且,累加的那一段也很有规律,列个表格看一下:

|    $n$   |       累加的地方       |  累加的个数 |
| :------: | :---------------: | :----: |
|   $100$  |    $45$ 到 $49$    |   $5$  |
|  $1000$  |   $445$ 到 $499$   |  $55$  |
|  $10000$ |  $4445$ 到 $4999$  |  $555$ |
| $100000$ | $44445$ 到 $49999$ | $5555$ |

规律还是挺好找的。

给出~~又臭又长的~~代码:

```cpp
#include<cstdio>
using namespace std;
int T;
int n;
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		int ans=0;//累加的答案 
		if(n<=100)//判断范围 
		{
			if(n>49)//如果在已经累加过了 
				printf("%d\n",ans+5);//直接加上 
			else if(n<45)//如果还没累加 
				printf("%d\n",ans);
			else
				printf("%d\n",ans+n-45+1);//加上已经累加的个数 
			continue;
		}
		ans+=5;//累加
		//之后的就和这里差不多,就不写注释了 
		if(n<=1000)
		{
			if(n>499)
				printf("%d\n",ans+55);
			else if(n<445)
				printf("%d\n",ans);
			else
				printf("%d\n",ans+n-445+1);
			continue;
		}
		ans+=55;
		if(n<=10000)
		{
			if(n>4999)
				printf("%d\n",ans+555);
			else if(n<4445)
				printf("%d\n",ans);
			else
				printf("%d\n",ans+n-4445+1);
			continue;
		}
		ans+=555;
		if(n<=100000)
		{
			if(n>49999)
				printf("%d\n",ans+5555);
			else if(n<44445)
				printf("%d\n",ans);
			else
				printf("%d\n",ans+n-44445+1);
			continue;
		}
		ans+=5555;
		if(n<=1000000)
		{
			if(n>499999)
				printf("%d\n",ans+55555);
			else if(n<444445)
				printf("%d\n",ans);
			else
				printf("%d\n",ans+n-444445+1);
			continue;
		}
		ans+=55555;
		if(n<=10000000)
		{
			if(n>4999999)
				printf("%d\n",ans+555555);
			else if(n<4444445)
				printf("%d\n",ans);
			else
				printf("%d\n",ans+n-4444445+1);
			continue;
		}
		ans+=555555;
		if(n<=100000000)
		{
			if(n>49999999)
				printf("%d\n",ans+5555555);
			else if(n<44444445)
				printf("%d\n",ans);
			else
				printf("%d\n",ans+n-44444445+1);
			continue;
		}
		ans+=5555555;
		if(n<=1000000000)
		{
			if(n>499999999)
				printf("%d\n",ans+55555555);
			else if(n<444444445)
				printf("%d\n",ans);
			else
				printf("%d\n",ans+n-444444445+1);
			continue;
		}
		ans+=55555555;
	}
	return 0;
} 
2024/12/25 20:24
加载中...