5顺时针螺旋数:
#include<stdio.h>
#include<string.h>
int map[25][25];
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
memset(map, 0, sizeof(25));
int temp = 1;
int x , y;
int up = 1, down = n;
int left = 1, right = n;
while(temp <= n*n)
{
for(int i = left; i <= right; i++)
{
map[up][i] = temp++;
}
up++;
for(int i = up; i <= down; i++)
{
map[i][right] = temp++;
}
right--;
for(int i = right; i >= left; i--)
{
map[down][i] = temp++;
}
down--;
for(int i = down; i >= up; i--)
{
map[i][left] = temp++;
}
left++;
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
printf("%d ", map[i][j]);
}
printf("\n");
}
}
return 0;
}
6.从键盘输入一个日期,格式 yyyy-M-d,要求计算该日期与 1949 年 10月 1 日距离多少天
例如 :
1949-10-2
1
1949-11-1
2
#include<stdio.h>
int ms[13] = {0,31,28,31,30,31,30,31,30,31,31,30,31,30,31};
int main()
{
int year, month, day;
char c1, c2;
while(scanf("%d%c%d%c%d",&year, &c1, &month, &c2, &day) != EOF)
{
int ans = 0;
if(y == 1949)
{
for(int i = 10; i < month; i++)
ans += ms[i];
ans += day;
ans--;
}
else
{
ans += ms[10]+ms[11]+ms[12]-1; //1949
for(int y = 1950; y < year; y++) //1949----year-1
{
if((y%4==0 && y%100 != 0) || y%400 == 0) ans += 366; //ÈóÄê
else ans += 365; //ƽÄê
}
for(int m = 1; m < month; m++) //1----month-1
{
ans += ms[i];
}
ans += day;
if((year%4==0 && year%100 !=0) || year%400==0)
{
if(month > 2) ans++;
}
}
printf("%d\n", ans);
}
return 0;
}
7信用卡卡号检测
#include<stdio.h>
#include<string.h>
int a[100];
char str[100];
int main()
{
while(scanf("%s", str))
{
int len = strlen(str);
int j = 1;
for(int i = len-1; i >= 0; i--)
{
a[j++] = str[i]-'0';
}
int odd = 0; //奇数
int even = 0;
for(int i = 1; i <= len; i++)
{
if(i%2 == 0)
{
even += a[i]*2 >= 10 ? a[i]*2-9 : a[i]*2;
}
else odd += a[i];
}
if((odd+even) % 10 == 0) printf("成功\n");
else printf("失败\n");
}
return 0;
}
#include<stdio.h>
int main()
{
for(int i = 100; i < 10000; i++)
{
if(i*i%1000 == i) printf("%d\n", i);
}
return 0;
}14.概率【结果好像有点问题】
#include<stdio.h>
#include<math.h>
int main()
{
int total = 2*2*2*2;
double n = 0;
double a = 1000;
double b = 2000;
for(int i = 0; i <=1; i++)
{
if(i == 0)
{
a += b/4;
b = b/4*3;
}
else
{
b += a/4;
a = a/4*3;
}
for(int j = 0; j <= 1; j++)
{
if(j == 0)
{
a += b/4;
b = b/4*3;
}
else
{
b += a/4;
a = a/4*3;
}
for(int k = 0; k <= 1; k++)
{
if(k == 0)
{
a += b/4;
b = b/4*3;
}
else
{
b += a/4;
a = a/4*3;
}
for(int e = 0; e <= 1; e++)
{
if(e == 0)
{
a += b/4;
b = b/4*3;
}
else
{
b += a/4;
a = a/4*3;
}
if((b-a<1000 && b-a>0) || (a-b<1000 && a-b>0)) n++;
//printf("%d %d %d %d %lf %lf\n", i, j, k, e, a, b);
//printf("%lf \n", a-b);
}
}
}
}
//printf("%lf\n", n);
printf("%.3lf\n",(double)n/16.0);
return 0;
}
15打印整数的划分
#include<stdio.h>
int n, cnt;
int a[21];
void fun(int divi, int sum)
{
if(sum == n) //注意最后一位的输出
{
for(int i = 0; i < cnt-1; i++)
printf("%d+", a[i]);
if(n-a[0] == cnt-1) printf("%d\n", a[cnt-1]);
else printf("%d,", a[cnt-1]);
return;
}
for(int i = divi; i > 0; i--) //由大到小划分
{
if(sum+i <= n)
{
a[cnt++] = i;
fun(i, sum+i); //划分 i,而不是 n-i,因为打印的结果是由大到小排序的
//所以每次枚举的最大数不能超过上次的最大值,同时也避免了重复
cnt--; //回溯,划分比i小1的
}
}
}
int main()
{
while(scanf("%d", &n) != EOF)
{
cnt = 0;
fun(n, 0);
}
return 0;
}
/*
//递归种数
#include<stdio.h>
int q(int n, int m)
{
if(n < 1 || m < 1) return 0;
if(n==1 || m==1)
return 1;
if(n < m)
return q(n, n);
if(n == m)
return q(n, m-1)+1;
return q(n, m-1)+q(n-m,m);
}
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
int ans = q(n,n);
printf("%d\n", ans);
}
return 0;
}
*/
16.21位花朵数,不会做点击打开链接