博文

循环链表(用来实现报数)(2007-02-03 22:03:00)

摘要:#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TYPE struct stu /* 有n给人站成一圈,分辨编号1``n,以k报数, 每报到k的人退出队列,然后继续从下一人开始报数,依次循环*/
/*  知道剩下的人等于k-1,求最后剩下的人的原来编号  */ struct stu
{
      
       int flag;
       struct stu *next; }; /* f函数功能:建立循环链表! */
TYPE *f ( int k, int *n )  
{
   
    TYPE *p1,*p2,*head;     //定义头指针及结点指针
   
    int i;                //控制数
   
    head = NULL;           //表头置空
   
    for( i = 1 ; i <= k ; i++ )   //循环创建
    {
     
  ......

阅读全文(2788) | 评论:0

二进制数转换为十进制数(2007-01-24 15:22:00)

摘要:#include <stdio.h>
#include <stdlib.h>
#define SIZE 16 //将十进制数转换成二进制数
int main()
{
   
    int i,j,k;
    int count=0;
    int a[SIZE] = {0};
   
    printf("输入十进制数:");
    scanf("%d",&i);
   
    while(i!=0)
    {
      
       a[count++] = i%2;
       i = i/2;            
   
    }
   
    for(j=0;j<SIZE/2;j++)
    {
      
                 k  = a[j];
        &nb......

阅读全文(2172) | 评论:0

十进制数转换为二进制数(2007-01-24 15:20:00)

摘要:#include <stdlib.h>
#include <stdio.h>
#define SIZE 32 //输入二进制数,转为十进制数
int main()
{
   
    void f(int b[],int n);      //求乘积
    int fun(int n);             //首位置换
   
    char ch;
    int i = 0,a[SIZE] = {0},j;
    unsigned int s = 0;
   
    printf("输入二进制数:");     while((ch=getchar())!='\n')   //输入二进制数
    {        if(ch=='1')
         a[i++] = ch-48;
        
         else if(ch=='0')
            a[i++] = ch-48;
      ......

阅读全文(2519) | 评论:0

万年历(2006-12-30 13:29:00)

摘要:#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define TURE 1
#define FALSE 0
int week(int *p1,int *p2,int *p3);
int data(int *p1,int *p2);
int Aurthorware(int year);
/*Aurthorware函数,用以查询该年是否为闰年*/
int Aurthorware(int year)
{
   int result;
   if((year%4==0&&year%100!=0)||(year%4==0&&year%400==0))
      result = TURE;  
   else
      result = FALSE;
   return result;   
}
int data(int *p1,int *p2)
{
    int month[13] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int i=1,k,j;
    if(Aurthorware(*p1))
       month[1]+=1;
    printf(" Sun  Mon  Tur  Wed  Thu  Fri  Sat \n");
    k = week(p1,p2,&i);
    ......

阅读全文(2068) | 评论:2

求n(n>0)以内的素数,并输出最大的素数(2006-12-25 17:24:00)

摘要:#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*1-n的素数并且求这些素数的和,还有这些素数中的最大值*/
int main()
{
    int i,total=0,j=0,k,max,num[2000];
    int a,n;    printf("please input n(2000>n>0)");     scanf("%d",&n);
    for(i=2;i<n;i++)
    {  
       a=1;               //每次给a复位
       for(k=2;k<=sqrt(i);k++)
          if(i%k==0)
           {
              a=0;    
              break;
        &nbs......

阅读全文(2626) | 评论:0

卡布列克常数(2006-10-08 12:41:00)

摘要:83.卡布列克常数
验证卡布列克运算。任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后得到的结果是6174,这个数被称为卡布列克数。
*问题分析与算法设计
题目中给出的处理过程很清楚,算法不需要特殊设计,可按照题目的叙述直接进行验证。
*程序与程序注释
#include<stdio.h>
void vr6174(int);
void parse_sort(int num,int *each);
void max_min(int *each,int *max,int *min);
void parse_sort(int num,int *each);
int count=0;
void main()
{
int n;
printf("Enter a number:");
scanf("%d", &n); /*输入任意正整数*/
vr6174(n); /*调用函数进行验证*/
}

void vr6174(int num)
{
int each[4],max,min;
if(num!=6174&&num) /*若不等于74且不等于0则进行卡布列克运算*/
{
parse_sort(num,each); /*将整数分解,数字存入each数组中*/
max_min(each,&max,&min); /*求数字组成的最大值和最小值*/
num=max-min; /*求最大值和最小值的差*/
printf("[%d]: %d-%d=%d\n",++count,max,min,num); /*输出该步计算过程*/
vr6174(num); /*递归调用自身继续进行卡布列克运算*/
}
}
void parse_sort(int n......

阅读全文(2630) | 评论:0

joseph问题(2006-09-24 13:34:00)

摘要:Joseph问题
题目描述:
原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,…,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。
现在的问题是:假设有k个好人和k个坏人。好人的编号的1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。
输入:
仅有的一个数字是k(0 < k <14)。
输出:
 使得最先出列的k个人都是坏人的m的最小值。
输入样例:
4
输出样例:
30
程序:
#include "stdio.h"
long k, m, begin;
int check(long remain)
{
 long result = ( begin+m-1  ) % remain;
 if (result>=k)
    {begin = result; return 1;}
 else return 0;
}
main()
{
 long i, find = 0;
 FILE *fp,*fp1;
 fp=fopen("d:\\a.txt","r");
 fp1=fopen("D:\\b.txt","w");
 fscanf(fp,"%ld", &k);
 for (m = k;!find; m++)
    {
     find = 1; begin = 0;
     for (i = 0; i < k; i++)
 if (!check(2*k-i))
       &nbs......

阅读全文(3434) | 评论:1