算法实现
#include<stdio.h>
intchange(intamount,intindex,intconstcoins[]){
if(amount==0)return1;
if(index<=0)return0;
for(inti=amount/coins[index-1];i>=0;--i){
if(change(amount-i*coins[index-1],index-1,coins)){
if(i)
printf("%d*%d",i,coins[index-1]);
return1;
}
}
return0;
}
intmain()
{
intcoins[]={20,50};
intconstsize=sizeof(coins)/sizeof(int);
intamount;
for(inti=0;i<size;++i){
for(intj=i+1;j<size;++j){
if(coins[i]>coins[j]){
inttemporary=coins[i];
coins[i]=coins[j];
coins[j]=temporary;
}
}
}
if(coins[0]<=0){
printf("数据有误,零钱必须大于0 ");
return-1;
}
printf("请输入要兑换的货币金额:");
scanf("%d",&amount);
if(change(amount,size,coins))
printf(" 兑换成功 ");
elseprintf(" 兑换失败 ");
return0;
}
② JAVA 实现算法
编码是不能用字符串的,大大大降低速度
public class Test{
   static public int getIntegerComplement(int n){
       return ~n&((1<<(32-Integer.numberOfLeadingZeros(n)))-1);
   }
   public static void main(String[] args){
      int a[]={1,5,50,256,65536};
      for(int i:a){
         int r=getIntegerComplement(i);
         System.out.println(i+"  "+Integer.toBinaryString(i)+
            " => "+r+"  "+Integer.toBinaryString(r));
      }
   }
}
========
1  1 => 0  0
5  101 => 2  10
50  110010 => 13  1101
256  100000000 => 255  11111111
65536  10000000000000000 => 65535  1111111111111111
③ 实现算法:
输出成文件
C++实现
代码:
#define_author"Reskip"
#define_CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
usingnamespacestd;
intencode(intx)
{
returnx*x+x*3+5;
}
intmain()
{
stringinput;
cin>>input;
freopen("save.txt","w",stdout);
for(chari:input)
{
cout<<encode(i)<<"";
}
return0;
}
④ 算法如何实现
我的方法比较笨...只限4个数,没有第一个的大哥哥写的好,第2个弟弟写的是错的,偶试过~我写的为:
main()
{
  char a,b,c,d,e,f,g,h;
  printf("请输入4个数");
  scanf("%c,%c,%c,%c\n",&a,&b,&c,&d);
  a=e;
  b=f;
  c=g;
  d=h;
  printf("四个数倒过来读为:%c,%c,%c,%c\n",h,g,f,e);
}
(仅供参考)不过给我分我也不介意~~呵呵~~~
⑤ 关于算法编程题(C语言实现)
char *a;  //字符串    改为    char  a[20];//存放字符串的字符数组
int jie; //方程的解    改为   double  jie;
dy = 0;  删去  dy=0;
两处的  for(i=1;i<=z;i++)    都改为    for(i = 0; i < z; i++)
if (a[i] == '==' )  改为   if (a[i] == '=' )
{z=i;      改为   {dy = i;
a=0;b=0;     删去  a=0;b=0;
fun(a,1,dy,&b,&c);   改为  fun(a, 0, dy - 1, &b, &c);
fun(a,dy,z,&b,&c);   改为 fun(a, dy + 1, z - 1, &b, &c);
jie=(d-b)/(e-c);  改为  jie=((double)(d-b))/(e-c);
printf("%c = %d",zm,jie);  改为  printf("%c = %f",zm,jie);
⑥ 怎样实现以下算法
死循环相信没什么问题,这个题目就是随机生成数据,然后找出是否有相同的数据的过程。如果是简单的循环类代码,就是类似穷举法,一个个比较的过程;但是如果写的优雅一些,实际上是一个排序过程。
我们来回忆一下排序的过程,从最简单的冒泡、选择,到最高级的快排、归并,每一个排序实际上都进行了比较。那么我们只需要在自定义的比较函数中对值进行输出即可。
一般语言中都会内置排序函数,例如C的qsort、JavaScript的Array.prototype.sort、PHP的usort等。都支持传入自定义的比较函数。下面以C举例:
#include<stdlib.h>
#include<stdio.h>
#defineNUM20
inthas_equals=0;
typedefstructitem{/*数据元素结构体*/
intval;/*整数值,用于比较*/
intidx;/*记录初始化时的位置,用于输出用*/
}Item;
voidinitData(Item*arr,intlen){
inti;
printf("======RANDOMDATA====== ");
for(i=0;i<len;i++){
arr[i].val=rand()%100;/*一百以内的随机数*/
printf("%d",arr[i].val);
arr[i].idx=i;
}
printf(" ");
}
intmyCmp(constvoid*va,constvoid*vb){
Item*a=(Item*)va;
Item*b=(Item*)vb;
if(a->val==b->val){/*两个值相等,输出*/
printf("FoundEquals:items[%d]==items[%d]==%d ",
a->idx,b->idx,a->val);
has_equals=1;/*标记找到相等的值*/
}
returna->val-b->val;
}
voidmain(){
Itemitems[NUM];
while(1){
has_equals=0;/*重置找到重复标记*/
initData(items,NUM);
qsort(items,NUM,sizeof(Item),myCmp);
if(!has_equals){
printf("++++++EveryItemisunique++++++ ");
break;
}
}
printf("Bye. ");
}
当数据有重复的时候会输出重复项,并标记重复标志。C语言中没有Exception机制,所以排序完成后再进行处理,不能中断排序过程(也可以使用LongJump)。其他语言中都有Exception机制,可以直接在检查到第一个相等之后就抛异常,外层捕获异常做逻辑即可。
⑦ 的实现算法是怎样的
我们要写个class,实现如下主程序调用:
static void Main(string[] args)
        {
            MyHash hash = new MyHash();
            hash["A1"] = DateTime.Now;
            hash["A2"] = 1;
            Console.WriteLine(Convert.ToString(hash["A1"]));
            Console.WriteLine(Convert.ToString(hash["A2"]));
        }
一看,也确实挺简单的,就是一个所引器,如下:
class MyHash
    {
        public object this[string key]
        {
            get
            {
            }
            set
            {
            }
        }
    }
程序中要保存的对象,最终是要保存在一个数组中的,而且需要通过一个转换函数来进行string key与数组Index的Map,如下:
private List<List<Tuple<string, object>>> lstArray = new List<List<Tuple<string, object>>>(defaultSize);
private int MapString2Int(string key)
        {
            int hashIndex=0;
            char[] keyAry = key.ToCharArray();
            foreach (var c in keyAry)
                hashIndex += (int)c;
            hashIndex = hashIndex % lstArray.Capacity;
            return hashIndex;
        }
这个函数是遍历string key的每个char,累加,最终取模(同数组的长度),这样得出的一个value肯定就在数组范围内。
如果2个key转换出来的index相同呢?会导致冲突,一个最简单的解决办法是把数组中的每个元素变成List, 也就是说,如果string key转换后出现了相同的Index,没关系,只要把那2个元素都放在那个Index所标识的数组位置中即可,本文中用的是List<Tuple<string, object>>。
下面是整个程序的代码:
class Program
    {
        static void Main(string[] args)
        {
            MyHash hash = new MyHash();
            hash["A1"] = DateTime.Now;
            hash["A2"] = 1;
            Console.WriteLine(Convert.ToString(hash["A1"]));
            Console.WriteLine(Convert.ToString(hash["A2"]));
        }
    }
    class MyHash
    {
        private const int defaultSize = 99999;
        private List<List<Tuple<string, object>>> lstArray = new List<List<Tuple<string, object>>>(defaultSize);
        public MyHash()
        {
            int i = lstArray.Capacity;
            while(i>=0)
            {
                lstArray.Add(new List<Tuple<string,object>>());
                i--;
            }
        }
        public object this[string key]
        {
            get
            {
                EnsureNotNull(key);
                List<Tuple<string, object>> lst;
                Tuple<string, object> obj = FindByKey(key, out lst);
                if (obj == null)
                    throw new Exception("Key不存在");
                return obj.Item2;
            }
            set
            {
                EnsureNotNull(key);
                List<Tuple<string, object>> lst;
                Tuple<string, object> obj = FindByKey(key, out lst);
                if (obj!=null)
                    lst.Remove(obj);
                lst.Add(new Tuple<string, object>(key, value));
            }
        }
        private Tuple<string, object> FindByKey(string key, out List<Tuple<string, object>> lst)
        {
            int hashIndex = MapString2Int(key);
            lst = lstArray[hashIndex];
            Tuple<string, object> obj = null;
            for (var i = 0; i < lst.Count; i++)
            {
                if (lst[i].Item1 == key)
                {
                    obj = lst[i];
                    break;
                }
            }
            return obj;
        }
        private static void EnsureNotNull(string key)
        {
            if (key == null || key.Trim().Length == 0)
                throw new Exception("Key不能为空");
        }
        private int MapString2Int(string key)
        {
            int hashIndex=0;
            char[] keyAry = key.ToCharArray();
            foreach (var c in keyAry)
                hashIndex += (int)c;
            hashIndex = hashIndex % lstArray.Capacity;
            Console.WriteLine(string.Format("{0}相应的Index为:{1}", key, hashIndex));
            return hashIndex;
        }
    }
运
⑧ 算法实现
多看一些源代码最好,先动手编一些简单的程序,程序能力的提高都是靠看靠编出来的,理论不用很到位的面面具到的都非常懂会用最好,遇到问题会查阅资料。参考书籍的话:c就是谭浩强那本比较经典了,外国书是好但看起来费劲。c++就清华的潜能也不错。你直接学《数据结构和算法分析设计》这门课不太合理,因为得有一些基础和编程经验在学会更好一些。
多去csdn学习,多寻找一些好的源代码看看。这样学起来很快而且不枯燥,如果一味得看书你会烦得不行也没有尽头,边学边练习会极大增强信心。
