列表

详情


NC16690. [NOIP2001]数的计算

描述

我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n ≤ 1000),然后对此自然数按照如下方法进行处理:
1.不作任何处理;
2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3.加上数后,继续按此规则进行处理,直到不能再加自然数为止.

输入描述

1个自然数n( n ≤ 1000 )

输出描述

1个整数,表示具有该性质数的个数。

示例1

输入:

6

输出:

6

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 448K, 提交时间: 2023-05-14 16:13:46

#include<iostream>
using namespace std;
int n;
int d[1100];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
d[i]=1;
for(int j=1;j<=i/2;j++)
d[i]+=d[j];
}
cout<<d[n];
}

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 376K, 提交时间: 2020-10-06 09:56:57

#include<bits/stdc++.h>
using namespace std;
int s,n;
int f(int n)
{
	if(!n)s++;
	else for(int i=0;i<=n/2;i++)f(i);
}main()
{
	cin>>n;
	f(n);cout<<s;
}

pypy3(pypy3.6.1) 解法, 执行用时: 62ms, 内存消耗: 18652K, 提交时间: 2020-03-18 19:16:18

n=int(input())
arr=[0 for i in range(n+1)]
arr[1]=1
for i in range(2,n+1) :
    arr[i]=sum(arr[:(i//2)+1])+1
# print(arr)
print(arr[n])

Python3 解法, 执行用时: 45ms, 内存消耗: 5760K, 提交时间: 2023-03-11 16:47:57

h=[0]*1000
n=int(input())
for i in range(1,n+1):
    h[i]=1
    for j in range(1,i//2+1):
        h[i]+=h[j]
print(h[n])

上一题