想写点感慨,想了好多,我太菜了,就这样吧。
小Q决定把一个整数n,分割为k个整数。
每个整数必须大于等于1。
小Q有多少方案。
输入描述:
输入整数n,k.(1<=n,k<=100)
输出描述:
输出方案数。答案对1e9+7取模。
输入样例:
3 3
输出样例:
1
- #include
h> - #include
h> -
- int num = 0;
- int dfs(int n, int k){
- if(k < 0){
- return ;
- }
- if(k == 0 && n == 0){
- num = (num + 1) % (int)(1e9+7);
- return ;
- }
- int i;
- for(i=1; i<=n; i++){
- dfs(n-i,k-1);
- }
- return ;
- }
- int main()
- {
- int n, k;
- scanf("%d %d", &n, &k);
-
- dfs(n, k);
-
- printf("%d\n", num);
- return 0;
- }
- #include
h> - #include
h> -
-
- int main()
- {
- int n, k;
- scanf("%d %d", &n, &k);
-
- int num[105][105];
- memset(num, 0, sizeof(int) * 1024);
- int i, j, kk;
- for(i=1; i<=n; i++){
- num[i][1] = 1;
- }
- for(i=1; i<=n; i++){
- for(j=1;j<=k;j++){
- if(i > j){
- num[i][j] = num[i-1][j-1] + num[i-j][j];
- }else{
- num[i][j] = 1;
- }
- }
- }
-
- printf("%d\n", num[n][k]);
- return 0;
- }
定义美丽数列A: 1. 数列中相邻的数越是靠内相对大小加一,a[2]=a[1]+1,a[n-2]=a[n-1]+1… 2. 距离边缘距离相等的 数的大小相等:a[0] = a[n-1],a[1] = a[n-2]… 通过修改最小的数字使得给定数列变成美丽数列。 修改后的值必须仍是正整数
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- int n, a[105], b[105];
- scanf("%d", &n);
- int i;
- for(i=0; i<n; i++){
- scanf("%d", &a[i]);
- }
- int min = n;
- for(i=0; i<n; i++){
- b[i] = a[i];
- int j, k;
- if(n % 2 == 1){
- b[n / 2] = b[i] + n/2 - i;
- // printf("****%d", b[n/2]);
- j = 0;
- while(j + n/2 <n){
- b[n/2 + j] = b[n/2] - j;
- b[n/2 - j] = b[n/2] - j;
- j++;
- }
-
- }else{
- if(i< n/2){
- b[0] = b[i] - i;
- j = 0;
- while(j<n/2){
- b[j] = b[0] + j;
- b[n-j-1] = b[j];
- j++;
- }
- }else{
- b[n-1] = b[i] - (n-1) +i;
- j = 0;
- while(j<n/2){
- b[j] = b[n-1] + j;
- b[n-1-j] = b[j];
- j++;
- }
- }
- }
-
- int ii, num = 0;
- for(ii=0; ii<n; ii++){
- // printf("%d ", b[ii]);
- if(b[ii] <=0){
- num = n;
- }
- if(a[ii] != b[ii]){
- num ++;
- }
- }
- if(min > num){
- min = num;
- }
- }
- printf("%d\n", min);
- return 0;
- }