什么是 ‘React Content Persistence’?在大型编辑器应用中如何保持撤销/重做后的 Fiber 节点复用
2025/12/22 18:52:06
假设有n个人围成一个圈报数,若报数序号为k的倍数则淘汰,现在我们用c语言模拟这个算法过程
这里提供两种算法。思路:1.建立一个数组用来存储序号 2.每k个人,就将此人代表的数组元素归0
3.重复循环直到只剩一人 4.输出数组
第一种思路:
#include<stdio.h> int main() { int k=0,n,m,i,j,quicknum=0;//quicknum为计数变量用来确保最后只剩一人 printf("请输入n、m:"); scanf("%d%d",&n,&m); int s[n]; for(i=0;i<n;i++) { s[i]=i+1; }//对应步骤1 for(i=0;i<n;i++) { if(s[i]!=0) k++; if(k==m) { quicknum++; k=0; s[i]=0;//核心程序段:对应报数过程 } if(quicknum==n-1) break; if(i==n-1) i=-1;//重置计数 } for(i=0;i<n;i++) { if(s[i]!=0) printf("%d",s[i]);//输出程序段 } }第二种思路只有核心代码部分有些许不同,用求余模拟报数过程
for(i=0;i<n;i++) { if(s[i]!=0) { k++; if(k%m==0) { s[i]=0; quicknum++;/*注意这个if语句一定要包含在上面if语句之中,否则若k%3==0条件成立时数组里的 下一个数为0,此时k不变 quicknum会继续加1*/ } } if(i==n-1) i=-1; if(quicknum==n-1) break; }