幸运数字“7”
解题思路:
- 先判断是否是“7”的倍数
- 不是的话,在看数字中是否含有“7”
#include<stdio.h>
int main(){
int n,flag;
scanf("%d",&n);
for(int k=1;k<=n;k++){
flag=0;
if(k%7==0)printf("%d ",k);
else {
int m=k;
while(m>0){
if(m%10==7){
flag=1;
break;
}
m=m/10;
}
}
if(flag==1) printf("%d ",k);
}
return 0;
}
方差
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
double x[n],s=0,sum=0;
int i;
for(i=0;i<n;i++){
scanf("%lf",&x[i]);
sum+=x[i];
}
double a=sum/n;
for(i=0;i<n;i++){
s+=(x[i]-a)*(x[i]-a);
}
printf("%.6lf\n",s);
return 0;
}
A+B
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
while(n-->0){
int a,b;
scanf("%d %d",&a,&b);
if(a>100) a=a%100;
if(b>100) b=b%100;
int c=a+b;
if(c>100) c=c%100;
printf("%d\n",c);
}
return 0;
}
获取指定二进制位
#include<stdio.h>
#include<math.h>
int gitbit(int n,int k){
int num;
int h=n;
while(n>0&&k>0){
num=n%10;
n=n/10;
k--;
}
if(k==0) return num;
else{
while(h>10) h=h/10;
return h;
}
}
int main(){
int n,k;
scanf("%d %d",&n,&k);
printf("%d\n",gitbit(n,k));
return 0;
}
发工资的日子
#include<stdio.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n);
int a[n],i,sum=0;
int num=0;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
sum=a[i];
if(sum>=100) num+=sum/100;
sum=sum%100;
if(sum>=50) num+=sum/50;
sum=sum%50;
if(sum>=10) num+=sum/10;
sum=sum%10;
if(sum>=2) num+=sum/2;
sum=sum%2;
if(sum==1) num+=sum;
}
printf("%d\n",num);
return 0;
}
最小整数
#include<stdio.h> #include<math.h> int fceil(double x){ if(x>0){ int a=(int)x+1; } else if(x<0){ int a=(int)x; } else return 0; } int main(){ double x; scanf("%lf",&x); printf("%d\n",fceil(x)); return 0; }
循环移位
t=value>>n|value<<32-n; 是一个位运算的表达式,用于将一个32位整数value的高n位和低32-n位进行交换。
具体解释如下:
value>>n 表示将value向右移动n位,即将value的低32-n位移到高n位。
value<<32-n 表示将value向左移动32-n位,即将value的高n位移到低32-n位。
| 表示按位或操作,将两个操作数的对应位进行或运算。
综合起来,t=value>>n|value<<32-n; 的作用是将value的高n位和低32-n位进行交换,并将结果保存在变量t中。
#include<stdio.h>
#include<math.h>
int move(int value,int n){
int t;
if(n>0) t=value>>n|value<<32-n;
else {
n=-n;
t=value<<n|value>>32-n;
}
return t;
}
int main(){
int value,n;
scanf("%d %d",&value,&n);
printf("%d\n",move(value,n));
return 0;
}
A+B时间加法
#include<stdio.h>
#include<math.h>
int main(){
int ah,am,as,bh,bm,bs;
scanf("%d %d %d %d %d %d",&ah,&am,&as,&bh,&bm,&bs);
int s,m,h;
s=as+bs;
m=am+bm+s/60;
h=ah+bh+m/60;
s=s%60;
m=m%60;
if(s>=24) s=s%24;
printf("%d %d %d\n",h,m,s);
return 0;
}
逆序整数
#include<stdio.h>
#include<math.h>
void f(long int n){
int m;
m=n%10;
printf("%d",m);
n=n/10;
if(n!=0) f(n);
}
int main(){
long int n;
scanf("%d",&n);
f(n);
return 0;
}
高低交换
#include<stdio.h>
#include<math.h>
inline int xchg(unsigned char n){
n=n>>4|n<<4;
return n;
}
int main(){
unsigned char n;
scanf("%d",&n);
printf("%d\n",xchg(n));
return 0;
}
快速排序
#include<stdio.h>
#include<math.h>
#include<string.h>
void QuickSort(int* a, int begin, int end)
{
int t;
if (begin >= end)
{
return;
}
//一趟的实现
int left = begin;
int right = end;
int keyi = left;
while (left < right)
{
//右边开始行动 一定要加上等于,因为快速排序找的是一定比它小的值
while (left < right && a[keyi] >= a[right])
{
right--;
}
//左边开始行动
while (left < right && a[left] <= a[keyi])
{
left++;
}
t=a[left];
a[left]=a[right];
a[right]=t;
}
//wap(&(a[keyi]), &(a[right]));
t=a[keyi];
a[keyi]=a[right];
a[right]=t;
keyi = right;
//[begin,keyi-1] keyi [keyi+1,end]
QuickSort(a, begin, keyi - 1);
QuickSort(a, keyi+1, end);
}
int main(){
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int s,m;
scanf("%d %d",&s,&m);
QuickSort(a,--s,--m);
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}