题目1:四位数(快乐刷题周G)
问题:
思路:
无
代码:
#include<stdio.h> #include<stdlib.h> int main(){ int n; while(scanf("%d",&n)!=EOF){ int digit; int s=0; for(int i=1000;i>=1;i/=10){ digit=n/i; printf("%d ",digit); n%=i; s+=digit; } if(s%2){ printf("\nNO\n"); } else{ printf("\nYES\n"); } } return 0; }题目2:寄邮件(错位排列,快乐刷题周I)
问题:
思路:
翻译题目:
题目可等价于求长度为 n 的排列中,没有任何一个元素出现在原来位置上的排列数目,也就是错位排列数
F(0)=1
F(1)=0
F(n)=(n−1)×[F(n−1)+F(n−2)](n≥2) ——> 错位排列通项公式
注意:笔友为19位时,总人数为20,所得排列数较大,防止溢出,选用long long
代码:
#include <stdio.h> int main() { int t; scanf("%d",&t); while(t--){ int n; scanf("%d", &n); int total = n + 1; // 总人数 long long f0 = 1; long long f1 = 0; long long fn = 0; for (int i = 2; i <= total; i++) { fn =(i - 1) *(f1+f0); f0 =f1; f1 =fn; } printf("%lld\n",fn); } return 0; }题目3:打印金字塔
问题:
思路:
无
代码:
#include <stdio.h> int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++){ for(int s=1;s<=(n-i)*2;s++){ printf(" "); //输出空格 } for(int j=1;j<=i;j++){ printf("%d ",j); } for(int k=i-1;k>=1;k--){ printf("%d ",k); } printf("\n"); } return 0; }题目4:字符逆序
问题:
思路:
无
代码:
#include <stdio.h> #include <string.h> int main() { char str[100]; fgets(str,sizeof(str),stdin); str[strcspn(str,"\n")]='\0'; int n=strlen(str); for(int i=n-1;i>=0;i--){ printf("%c",str[i]); } return 0; }