#n()函数分组时运行错误
library(dplyr)
df <- tibble(
g=sample(rep(letters[1:3],1:3)),
x=runif(6),
y=runif(6)
)
gf <- df %>% group_by(g)
gf %>% summarise(n=n())
出现错误提示
```r
`summarise()` has grouped output by 'g'. You can override using the `.groups` argument.
# A tibble: 0 × 2
# Groups: g [0]
# ℹ 2 variables: g , n
Warning message:
Returning more (or less) than 1 row per `summarise()` group was deprecated in dplyr 1.1.0.
ℹ Please use `reframe()` instead.
ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()` always returns an
ungrouped data frame and adjust accordingly.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
>
不知道你这个问题是否已经解决, 如果还没有解决的话:一、 问题描述
分析:
理解皇后不被攻击的条件:n后问题等价于在n*n格的棋盘上放置n个皇后,任何两个皇后不能放在同一行或同一列或同一斜线上。
算法模块简要分析。
用数组存储皇后的位置,将i设置为0。
Int place(*x,n) :数组x[] 用来表示列数,n为皇后个数,用来判断皇后 否被攻击,判断的条件是(x[i]-x[n]==i-n||x[i]-x[n]==n-i||x[i]==x[n])即用来判断“同一行或同一列或同一斜线上”。
用数组存储皇后的位置,将i设置为0。
Int iniprint(*x,n):初始化打印函数,相当于对棋盘初始化。将可以放皇后的位置记为“1”,不放皇后的位置记为“0”
Int Nqueen(int n):n皇后问题求解,如果满足一组可行解,sum++。Int i=0,如果x[i]>=n的时候即进行下一行,i++;当i=n时,sum++;输出该组可行解的个数和位置的矩阵。并且i–,回溯到上一层继续搜索可行解。
二、 程序实现
#include<stdio.h>
static int n,sum=0;//可行解个数
static int locate[20];
int place(int k)
{//判断是否在一条线上并返回0,1
for(int i=1;i<k;i++){
if(locate[i] == locate[k] || (i+locate[i])==(locate[k]+k)||(locate[i]-i)==(locate[k]-k))
return 0;
}
return 1;
}
void Back(int m){
if(m>n){
sum++;
for(int i=1;i<=n;i++){
for(int a=1;a<=n;a++){
if(a<locate[i]||a>locate[i])
printf(" * ");
else
printf(" # ");
//如果已经安排完毕则输出棋盘和记录
}
printf("\n");
}
printf("第%d种解决办法如上图所示:",sum);
for(int i=1;i<=n;i++)
printf("%d ",locate[i]);
printf("\n\n\n");
}
else
{
//如果没有安排完则地柜继续下一个安排,无解则返回上一个
for(int i=1;i<=n;i++)
{
locate[m]=i;
if(place(m))
Back(m+1);
}
}
}
int main()
{
printf("请输入皇后的数量:");
scanf("%d",&n);
printf("\n(#表示皇后,*表示棋盘)\n\n\n");
Back(1);
printf("%d个皇后共有以上%d种解法\n\n\n",n,sum);
}
三、 实验结果与分析
结果分析: